いくつかのシム/ポリフィル ライブラリを調べたところ、Object.getPrototypeOf
. 存在しない場合、それらは使用に失敗し、__proto__
それが存在しない場合はobject.constructor.prototype
.
それ__proto__
は「非標準」であり、方法とは少し異なりObject.getPrototypeOf
ますが、かなり互換性があることを理解しています。
また、原則として、他の 2 つが存在しない多くの状況では、外部アクセス可能で十分であることも理解しています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__
?
無いような気がしますが、まだ知らない情報があれば調べてみたいと思います。