在JavaScript中使用InstanceOf和Prototypal继承

时间:2013-11-27 15:42:34

标签: javascript inheritance prototype typechecking

我正在尝试使用原型继承,但我遇到了麻烦。

这不起作用

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上并不是那么棒。我如何使这项工作?

1 个答案:

答案 0 :(得分:2)

更好的方法是call Parent上的this构造函数:

var Child = function(){
    Parent.call(this);
}

这样,Parent构造函数代码运行时this设置为this构造函数中的Child,但您不能更改__prototype__ 1 {} this

您的两个示例确实生成了一个结构相同的child实例。 然而,主要区别在于您的第一个示例Child.prototype != child.__proto__。虽然Child.prototypechild.__proto__都是__proto__ Parent.prototype的对象,但它们不是完全相同的对象,因此{ {1}}失败。

想要instanceof,以便Child.prototype = Object.create(Parent.prototype);个实例可以访问Child的原型方法。 (目前你在Parent上没有任何方法,但也许有一天你会这样做。)