Stackoverflow的大家好!我一直在浏览Mozilla开发者网络的JavaScript指南,并在Details of the object model页面上看到了这个功能:
该函数用于检查对象是否是对象构造函数的实例:
function instanceOf(object, constructor) {
while (object != null) {
if (object == constructor.prototype)
return true;
if (typeof object == 'xml') {
return constructor.prototype == XML.prototype;
}
object = object.__proto__;
}
return false;
}
我的问题是,在同一页面上,它表示chris
是Engineer
类型的对象,则以下代码返回true:
chris.__proto__ == Engineer.prototype;
但是,在上面的instanceOf
函数中,它使用以下比较表达式来检查对象是否是构造函数的实例:
object == constructor.prototype
表达式不应该是:
object.__proto__ == constructor.prototype
或者我在这里错过了一点?感谢大家的帮助和时间!
答案 0 :(得分:5)
你错过了object = object.__proto__;
循环底部的语句while
...这遍历了原型链。 object
变量包含遍历每个步骤的该链中的当前对象。
答案 1 :(得分:0)
我知道我来晚了一些,但是下面的代码片段的行为应该与isInstanceOf完全一样
Object.prototype.instanceOf = function (type) {
let proto = this.__proto__;
while (proto) {
if (proto.constructor && proto.constructor === type)
return true;
if (proto.__proto__)
proto = proto.__proto__;
else
break;
}
return false;
};
console.log(Number(12).instanceOf(Number)); //true
答案 2 :(得分:0)
function C() {}
function D() {}
var o = new C();
// true, because: Object.getPrototypeOf(o) === C.prototype
o instanceof C;
instanceOf将检查原型与左侧对象和右侧对象。