通常,原型用於在它們上面放置函數/方法,而不是屬性,因爲使用屬性時,您將在所有對象實例之間共享單個屬性值。此外,如果您在構造函數中添加方法,您可能不需要爲繼承設置原型。例如:
function Employee(name) {
this.name = "";
this.dept = "general";
this.reportName = function() {return this.name};
}
function Manager(name) {
Employee.call(this, name);
this.reports = [];
}
var manager = new Manager('Peter');
manager.reportName(); // Peter
然而,對象的構造內添加方法/功能是低效的,因爲每次構造函數被調用創建函數的一個實例。所以通常情況下,所有的方法,而不是屬性,是在原型分配是這樣的:現在
function Employee(name) {
this.name = "";
this.dept = "general";
}
Employee.prototype.reportName = function() {return this.name};
,在這種情況下,簡單地調用構造函數是不夠的:
function Manager(name) {
Employee.call(this, name);
this.reports = [];
}
var manager = new Manager('Peter');
manager.reportName(); // throws an error
您需要設置一個原型:
Manager.prototype = Object.create(Employee.prototype)
var manager = new Manager('Peter');
manager.reportName(); // 'Peter'
嘗試'新的經理()instanceof員工'沒有它,或嘗試把東西放在'員工'的原型。 – Ryan