javascript - 检查对象是否具有用户定义的原型(prototype)?

标签 javascript object prototype

简单地说,我可以检查一个对象是否具有用户定义的原型(prototype)吗?

例子;

var A = function() {};

var B = function() {};

B.prototype = {

};

// Pseudocode
A.hasUserPrototype(); // False
B.hasUserPrototype(); // True

这可能吗?

最佳答案

假设你想知道一个对象是否是自定义构造函数的实例,你可以将它的原型(prototype)与 Object.prototype 进行比较:

function hasUserPrototype(obj) {
    return Object.getPrototypeOf(obj) !== Object.prototype;
}

或者,如果您正确维护 constructor 属性:

function hasUserPrototype(obj) {
    return obj.constructor !== Object;
}

这也适用于不支持 Object.getPrototypeOf 的浏览器。

但是对于其他 native 对象,如函数、正则表达式或日期,这两种解决方案都会返回 true。为了获得“更好”的解决方案,您可以将原型(prototype)或构造函数与所有 native 原型(prototype)/构造函数进行比较。


更新:

如果你想测试一个函数是否有一个用户定义的prototype值,恐怕没有办法检测到这一点。初始值只是一个具有特殊属性 (constructor) 的简单对象。您可以测试此属性是否存在(A.prototype.hasOwnProperty('constructor')),但如果设置原型(prototype)的人做对了,他们就会正确地添加更改原型(prototype)后的 constructor 属性。

关于javascript - 检查对象是否具有用户定义的原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597170/

相关文章:

javascript - 如何在不弹出的情况下将 strip 与 react-native expo sdk36 集成?

javascript - div 不显示。为什么?

c++ - 在 C++ 中,如何使用作为对象数组的私有(private)变量?

javascript - 在 Javascript 中合并对象的 native 方法

javascript - 如何在 jQuery 中定位特定链接/点击?

javascript - 如何使用 jQuery 真正限制输入字段的可用字符?

javascript - 无法为 JavaScript 中的对象变量赋值

c# - 如何在 C# 中将 Object 转换为 List<string>?

javascript - 使用 Object.create() 的对象创建模式

javascript - 在构造函数中使用 "this"与 ".prototype"