我一直在浏览一些 shim/polyfill 库,发现其中一些有Object.getPrototypeOf
. 在不存在时,它们会使用__proto__
,如果不存在,则使用object.constructor.prototype
.
我知道这__proto__
是“非标准的”,虽然与Object.getPrototypeOf
方法略有不同,但它们可以互换。
我也明白,原则上object.constructor.prototype
,在其他两个都不存在的许多情况下,外部可访问就足够了(假设原型没有被重新分配)。
我遇到的问题是以下示例:
function findPropertyOwner(object, property) {
var count = 0;
do {
if (object.hasOwnProperty(property)) {
return [object, count];
}
object = Object.getPrototypeOf(object);
count += 1;
} while (object);
return undefined;
}
或者
function instanceOf(object, constructor) {
while (object) {
if (object === constructor.prototype) {
return true;
}
object = Object.getPrototypeOf(object);
}
return false;
}
有了上面这样的例子,我们可以说是“走链子”,如果垫片退回到object.constructor.prototype
那么我们现在就会陷入无限循环的可怕情况。
我的问题:有什么方法可以在不存在且不存在Object.getPrototypeOf
的环境中实现上述代码?__proto__
我的感觉是没有,但我只是想检查一下是否有一些我没有遇到的信息。