javascriptを使用すると、あるオブジェクトが別のオブジェクトからプロパティを継承するようにすることができます。そのため、最初のオブジェクトにプロパティが見つからない場合、2番目のオブジェクトが検索されます。 prototype
プロパティをコンストラクタ関数に再割り当てすることにより、プロパティを検索する多くのオブジェクトのチェーンを作成できます。例えばあるコンストラクタ関数のプロパティを別のコンストラクタ関数に継承することは可能ですか?
:
var X = function() {};
X.prototype.x = "x";
var Y = function() {};
Y.prototype = new X();
Y.prototype.y = "y";
var z = new Y();
z.z = "z";
///////////////
console.log(z.z); // searches z for property 'z', finds it and returns 'z'
console.log(z.y); // searches z, fails, searches z.[[hidden_prototype]]
// (which is Y.prototype), finds it and returns 'y'
console.log(z.x); // searches z, fails, searches Y.prototype, fails,
// searches Y.prototype.[[hidden_prototype]]
// (which is X.prototype), finds it and returns "x"
私は上記のコードでX
とY
すなわち、コンストラクタ関数のプロパティにそれを拡張することが可能であったかどうかも疑問に思いました。
X.val = 42;
console.log(Y.val); // returns 42
Y.[[hidden_prototype]] === X
場合、これは動作しますが、私はX
とY
もする必要がある場合という設定方法が分からない:たとえば、次のようにも動作するように上記のコードを変更する方法がありますコンストラクタ関数
ありがとうございました。私が知りたかったことですが、質問をタイプしたときに関連リンクが表示されませんでした。見た目では、可能な回答リストはタイトルだけでなくテキストの内容によっても更新されます。質問を入力した後で再度チェックしてください:) –
非標準で廃止予定の__proto__プロパティは使用しないでください。これは広くサポートされておらず、将来サポートするブラウザからは削除されます。 – RobG