简而言之,我可以检查一个对象是否具有用户定义的原型吗?
Example;
var A = function() {};
var B = function() {};
B.prototype = {
};
// Pseudocode
A.hasUserPrototype(); // False
B.hasUserPrototype(); // True
这可能吗?
假设您想找出一个对象是否是自定义构造函数的实例,您可以将其原型与Object.prototype
:
function hasUserPrototype(obj) {
return Object.getPrototypeOf(obj) !== Object.prototype;
}
或者如果您保持constructor
属性正确:
function hasUserPrototype(obj) {
return obj.constructor !== Object;
}
这也适用于不支持的浏览器Object.getPrototypeOf
.
但这两种解决方案都会返回true
也适用于其他本机对象,例如函数、正则表达式或日期。为了获得“更好”的解决方案,您可以将原型或构造函数与所有本机原型/构造函数进行比较。
Update:
如果你想测试是否function有用户定义的prototype
value,那么恐怕没有办法检测到这一点。初始值只是一个具有特殊属性的简单对象(constructor
). You could测试该属性是否存在(A.prototype.hasOwnProperty('constructor')
),但是如果设置原型的人做对了,他们就会正确地添加constructor
更改原型后的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)