gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:11 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com