Javascript 中 isPrototypeOf 和 instanceof 有什么区别?

2024-04-19

在我自己的一些旧代码中,我使用以下内容:

Object.prototype.instanceOf = function( iface )
{
 return iface.prototype.isPrototypeOf( this );
};

然后我就这样做(例如)

[].instanceOf( Array )

这可行,但似乎以下内容也会做同样的事情:

[] instanceof Array

当然,这只是一个非常简单的例子。因此我的问题是:

Is a instanceof b ALWAYSb.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(使用前将#替换为@)

Javascript 中 isPrototypeOf 和 instanceof 有什么区别? 的相关文章

随机推荐