希望这会对您有所帮助:
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 来说是四倍。
你可以很高兴地覆盖一个人的特定对象:
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!
原因是您更改了共享原型对象(静态,在其他语言中)的属性,而不是像 Jim 的情况那样替换整个原型对象(引用一个新对象,而不是静态对象)。
但是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);