我正在尝试使用原型继承,但我遇到了麻烦。
这不起作用
var Parent = function(){
}
var Child = function(){
this.__proto__ = new Parent();
}
var child = new Child();
console.log(child instanceof Child) //logs false
但这确实
var Parent = function(){
}
var Child = function(){
}
Child.prototype = new Parent();
var child = new Child();
console.log(child instanceof Child) // logs true
我想要第一个选项的唯一原因是我可以利用父的构造函数。我猜this
是问题,但我在javascript上并不是那么棒。我如何使这项工作?
答案 0 :(得分:2)
更好的方法是call
Parent
上的this
构造函数:
var Child = function(){
Parent.call(this);
}
这样,Parent
构造函数代码运行时this
设置为this
构造函数中的Child
,但您不能更改__prototype__
1 {} this
。
您的两个示例确实生成了一个结构相同的child
实例。 然而,主要区别在于您的第一个示例Child.prototype != child.__proto__
。虽然Child.prototype
和child.__proto__
都是__proto__
Parent.prototype
的对象,但它们不是完全相同的对象,因此{ {1}}失败。
您也想要instanceof
,以便Child.prototype = Object.create(Parent.prototype);
个实例可以访问Child
的原型方法。 (目前你在Parent
上没有任何方法,但也许有一天你会这样做。)