在我自己的一些旧代码中,我使用以下内容:
Object.prototype.instanceOf = function( iface )
{
return iface.prototype.isPrototypeOf( this );
};
然后我就这样做(例如)
[].instanceOf( Array )
这可行,但似乎以下内容也会做同样的事情:
[] instanceof Array
当然,这只是一个非常简单的例子。因此我的问题是:
Is a instanceof b
ALWAYS与b.prototype.isPrototypeOf(a)
?
是的,它们做同样的事情,都遍历原型链寻找其中的特定对象。
两者的区别在于它们是什么,以及如何使用它们,例如这isPrototypeOf http://bclary.com/2004/11/07/#a-15.2.4.6 is 一个函数可以在Object.prototype
对象,它可以让你测试是否一个特定的对象位于另一个方法的原型链中,因为该方法是在Object.prototype
,它可用于所有对象。
instanceof http://bclary.com/2004/11/07/#a-11.8.6 is 操作员它需要两个操作数,一个对象和一个构造函数 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Creating_New_Objects/Using_a_Constructor_Function,它将测试传递的函数是否prototype
属性存在于对象的链上(通过[[HasInstance]](V) https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Creating_New_Objects/Using_a_Constructor_Function内部操作,仅在 Function 对象中可用)。
例如:
function A () {
this.a = 1;
}
function B () {
this.b = 2;
}
B.prototype = new A();
B.prototype.constructor = B;
function C () {
this.c = 3;
}
C.prototype = new B();
C.prototype.constructor = C;
var c = new C();
// instanceof expects a constructor function
c instanceof A; // true
c instanceof B; // true
c instanceof C; // true
// isPrototypeOf, can be used on any object
A.prototype.isPrototypeOf(c); // true
B.prototype.isPrototypeOf(c); // true
C.prototype.isPrototypeOf(c); // true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)