gar*_*uan 5 javascript oop inheritance
我创建了一个像下面这样的对象.
var BaseObject = function(){
var base = this;
base.prop;
base.setProp = function(val){
base.prop = val;
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用该setProp方法时,我得到以下内容.
var a = new BaseObject();
var b = new BaseObject();
a.setProp("foo");
b.setProp("bar");
console.log(a.prop); // outputs 'foo'
console.log(b.prop); // outputs 'bar'
Run Code Online (Sandbox Code Playgroud)
然后我创建了另一个继承自BaseObject这样的对象.
var TestObject = function(){
// do something
}
TestObject.prototype = new BaseObject();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了一个我没想到的结果.
var a = new TestObject();
var b = new TestObject();
a.setProp("foo");
b.setProp("bar");
console.log(a.prop); // outputs 'bar'
console.log(b.prop); // outputs 'bar'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.我最近一直在阅读很多关于闭包和原型继承的内容,我怀疑我已经把它弄得一团糟.因此,非常感谢任何有关此特定示例为何如此工作的指针.
BaseObject所有 s 都继承自一个实例TestObject。不要使用实例来创建原型链!
你想要的是:
var TestObject = function(){
BaseObject.call(this); // give this instance own properties from BaseObject
// do something
}
TestObject.prototype = Object.create(BaseObject.prototype);
Run Code Online (Sandbox Code Playgroud)
请参阅JavaScript 继承:Object.create 与 new、正确的 javascript 继承和在 Derived.prototype = new Base 处使用 'new' 关键字的原因是什么,以获取有关 的问题的详细说明new。另请参阅Crockford 的原型继承 - 嵌套对象的问题
| 归档时间: |
|
| 查看次数: |
1988 次 |
| 最近记录: |