うまくいけば、これはあなたを助けるでしょう:
var Person = function (name, age) {
this.getName = function () { return name; };
this.getAge = function () { return age; };
};
var Employee = function (employee_id) {
this.printBadge = function () {
console.log("#" + employee_id + " | " + this.record.getName());
};
};
Employee.prototype.record = new Person("Bob", 32);
var jim = new Employee(1),
doug = new Employee(2);
jim.printBadge(); // #1 | Bob
doug.printBadge(); // #2 | Bob
「継承よりも構成を優先する」というスローガンは、JavaScript では 4 倍になります。個人の特定のオブジェクト
を
非常にうまくオーバーライドできます。
jim.record = { getName : function () { return "Jim"; } };
jim.printBadge(); // #1 | Jim
doug.printBadge(); // #2 | Bob
プロトタイプ オブジェクト (インスタンスが参照するオブジェクト) のプロパティを変更するときは注意してください。
var jeff = new Employee(3);
jeff.record.getName = function () { return "OMG! Yuse guys is scr00d!" };
jim.printBadge(); // #1 | Jim
doug.printBadge(); // #2 | OMG! Yuse guys is scr00d!
jeff.printBadge(); // #3 | OMG! Yuse guys is scr00d!
理由は、ジムの場合のようにプロトタイプ オブジェクト全体を置き換える (静的オブジェクトではなく新しいオブジェクトを参照する) のではなく、共有されたプロトタイプ オブジェクト (他の言語では静的) のプロパティを変更したためです。
しかしX.prototype.y = new Z();
、単純に次のように見ることができます:
var bob = new Person("Bob", 32);
Employee.prototype.record = bob;
var jim = new Employee(1),
doug = new Employee(2),
jeff = new Employee(3);