JavaScript isPrototypeOf 与 instanceof 用法

标签 javascript

假设我们有以下内容:

function Super() {
      // init code
}

function Sub() {
      Super.call(this);
      // other init code
}

Sub.prototype = new Super();

var sub = new Sub();

然后,在我们的 ocde 的其他部分,我们可以使用以下任一方法来检查关系:

sub instanceof Super;   

Super.prototype.isPrototypeOf( sub )

无论哪种方式,我们都需要拥有对象 (sub) 和父构造函数 (Super)。那么,有什么理由让您使用一个与另一个吗?有没有其他情况区分的更清楚?

我已经仔细阅读了2464426 , 但没有找到足够具体的答案。

最佳答案

假设您不在代码中使用构造函数,而是使用Object.create生成具有特定原型(prototype)的对象。您的程序可能设计为根本不使用构造函数:

var superProto = {
    // some super properties
}

var subProto = Object.create(superProto);
subProto.someProp = 5;

var sub = Object.create(subProto);

console.log(superProto.isPrototypeOf(sub));  // true
console.log(sub instanceof superProto);      // TypeError

在这里,您没有用于instanceof 的构造函数。您只能使用 subProto.isPrototypeOf(sub)

关于JavaScript isPrototypeOf 与 instanceof 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343545/

相关文章:

javascript - 如何让这个复选框切换工作

javascript - nodejs使用gm模块来处理图像,但我需要它同步

javascript - 控制字符作为分隔符

javascript - 在 Safari 的 ipad/iphone 上停止传播

javascript - 当路由参数和地址无效时,Angular 2不会重定向到404页面

javascript - Socket.io 无缘无故地恢复到 XHR/JSONP 轮询

javascript - 为什么 ContentEditable 在 Firefox 中很糟糕

javascript - 如何从特定的 div 中取消呈现/分离/删除 ZingChart 库?

javascript - 如何发出 AJAX 请求以发布 JSON 数据并处理响应

javascript - Jquery 等待 AJAX 调用完成