简单地说,我可以检查一个对象是否具有用户定义的原型(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/