在JavaScript中使用带有原型继承的InstanceOf
Using InstanceOf with Prototypal inheritance in JavaScript
我正在尝试使用原型继承,但遇到了麻烦。
不起作用
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。我该如何做到这一点?
执行此操作的更好方法是call
this
:上的Parent
构造函数
var Child = function(){
Parent.call(this);
}
这样,Parent
构造函数代码在Child
构造函数中将其this
设置为this
的情况下运行,但不更改this
的__prototype__
。
您的两个示例确实生成了一个结构相同的child
实例但是,主要区别在于在您的第一个示例Child.prototype != child.__proto__
中。虽然Child.prototype
和child.__proto__
都是__proto__
为Parent.prototype
的对象,但它们不是完全相同的对象,因此instanceof
失败。
您可能还想执行Child.prototype = Object.create(Parent.prototype);
,以便Child
实例可以访问Parent
的原型方法。(目前你在Parent.prototype
上没有任何方法,但也许有一天你会的。)
相关文章:
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- $emit,$broadcast,原型继承
- 原型继承未按预期工作
- JavaScript中的原型继承.我可以称之为“超级”等价物吗?
- 不创建父对象的原型继承
- Javascript基本继承与Crockford原型继承
- JavaScript-构造函数参数和原型继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- 原型继承返回值
- 如何进行JavaScript原型继承(原型链)
- Javascript-经理是一个人,但不是经理本身?功能/原型继承
- 模块化JS和原型继承
- 理解经典继承和原型继承之间的区别
- 理解Javascript原型继承
- AngularJS:多个工厂实例任何原型继承
- Javascript原型继承原型函数调用
- JavaScript中的原型继承是否演示了类型多态性
- 在JavaScript中使用带有原型继承的InstanceOf
- 原型继承和原型属性
- JavaScript-原型继承