prototype 关联的几种方式不太懂
来源:2-16 Sub Classes(如何继承一个类?)

慕UI9336467
2020-04-10
《你不知道的JavaScript 上卷》中的代码
书中说:
function Foo(name) {
this.name = name;
}
Foo.prototype.myName = function() {
return this.name;
};
function Bar(name,label) {
Foo.call( this, name );
this.label = label;
}
// 我们创建了一个新的Bar.prototype对象并关联到Foo.prototype
Bar.prototype = Object.create( Foo.prototype ); <---- 书里的方法
Bar.prototype = Foo.prototype; <---- 老师你的方法
Object.setPrototypeOf( Bar.prototype, Foo.prototype ); <---- 另一种
// 老师上面的三种方法有什么 区别啊
// 注意!现在没有Bar.prototype.constructor了
// 如果你需要这个属性的话可能需要手动修复一下它
Bar.prototype.myLabel = function() {
return this.label;
};
var a = new Bar( "a", "obj a" );
a.myName(); // "a"
a.myLabel(); // "obj a"
// 和你想要的机制不一样!
Bar.prototype = Foo.prototype;
// 基本上满足你的需求,但是可能会产生一些副作用 :(
Bar.prototype = new Foo();
写回答
1回答
-
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__,也就是在原型链中增加一个节点的方式。protype直接赋值,是对象类型的引用,这样就可以直接访问父类的方法
012020-04-12
相似问题