私はプロトタイプの上書きを防ぐための Crockford shim を読んでいて、それが最終的な解決策ではないことを理解しています。また、 ES5 Shimがこれに代わる実行可能な代替手段になる可能性があることも理解しています。また、より堅牢で安全な代替手段を提供するこの投稿も読みました。
Object.create
それでも、彼のシムが何を「言っている」のか、そして「何をしているのか」を知りたい. 私の説明コメントが正しいかどうか誰か教えてもらえますか?
if (typeof Object.create === 'undefined') {
//If the browser doesn't support Object.create
Object.create = function (o) {
//Object.create equals an anonymous function that accepts one parameter, 'o'.
function F() {};
//Create a new function called 'F' which is just an empty object.
F.prototype = o;
//the prototype of the 'F' function should point to the
//parameter of the anonymous function.
return new F();
//create a new constructor function based off of the 'F' function.
};
}
//Then, based off of the 'Lost' example in the Crockford book...
var another_stooge = Object.create(stooge);
//'another_stooge' prototypes off of 'stooge' using new school Object.create.
//But if the browser doesn't support Object.create,
//'another_stooge' prototypes off of 'stooge' using the old school method.
このようにして、「another_stooge」に追加するときに「stooge」オブジェクトのプロトタイプを上書きすることはできません。「constructor」を使用して「stooge」プロトタイプをリセットする必要はありません。
前もって感謝します、
-k