Javascript原型继承问题
Javascript prototype inheritance issue
我在原型继承方面遇到了问题,我找不到为什么它无法正常工作。
片段是这样的:
function Field(newKey, val) {
this.key = newKey || "";
this.value = val || "";
}
Field.prototype.isEmpty = function() {
return this.value === undefined || this.value === null || this.value === "";
};
function DoubleField(newKey, val) {
this.base = Field;
this.base(newKey, val);
}
DoubleField.prototype = new Field();
DoubleField.prototype.constructor = DoubleField;
function IntegerField(newKey, val) {
this.base = DoubleField;
this.base(newKey, val);
}
IntegerField.prototype = new DoubleField();
IntegerField.prototype.constructor = IntegerField;
var f = new Field('keyfield', 'valField');
var d = new DoubleField('keydouble', 'valDouble');
var i = new IntegerField('keyinteger');
var res = f.isEmtpy();
对 f.isEmpty 的调用失败?为什么?对 d.isEmpty 或 i.isEmpty 的调用按预期工作得很好。
我无法意识到我做错了什么。任何帮助将不胜感激!
错误在代码的最后一行:
var res = f.isEmtpy();//That's what you wrote
正确的是:
var res = f.isEmpty();
你还没有说它是如何失败的。正如我在评论中指出的那样,至少有一个错字:var res = f.isEmtpy();
应该var res = f.isEmpty();
但除此之外(我认为这只是问题中的错字,而不是代码(,请注意派生构造函数中的这一行:
this.base = DoubleField;
。不会按您的预期工作。考虑一下IntegerField
的情况。您调用new IntegerField
,它会this.base
设置为DoubleField
并调用它。但是DoubleField
构造函数然后将this.base
设置为 Field
。因此,您有一个IntegerField
实例,其base
属性指向Field
,而不是DoubleField
。
不能使用实例属性来跟踪世系。它适用于父母/孩子的情况,但您遇到了上述"孙子"问题。
我建议使用那里的继承帮助程序脚本之一。有几个,包括我自己的Lineage
.这些脚本可帮助您构建继承层次结构,为您处理管道,以便您可以专注于构建要构建的任何内容。我们只是暂时需要它们;JavaScript 在下一个版本中得到了语法糖来帮助解决这个问题(当然,一旦它真正完成,我们还需要几年时间才能看到对它的广泛支持(。
相关文章:
- JavaScript对象继承问题
- 类中对象的奇怪问题(John Resig简单继承)
- AngularJS 1.X ES6继承问题
- Javascript继承的问题&基类原型
- 继承问题
- Javascript和原型继承问题
- 使用函数原型的 JavaScript 继承问题
- Javascript原型继承问题
- ng-重复范围问题:两级继承
- 尝试继承for循环中名称引用的所有类时出现问题
- node.js中的继承问题:试图覆盖子类的原型时出现赋值错误
- 原型继承的新手-Can'找不到Undefined变量的问题
- JavaScript对象继承问题
- Backbone.js继承的问题
- 基本javascript继承问题
- Javascript继承问题
- Javascript继承类构造函数问题
- “this”的继承与问题关键字
- Javascript继承设计问题
- 在javascript中继承了DOM元素对象!这段代码有什么问题?