JavaScript 對象原型

所有 JavaScript 對象都從原型繼承屬性和方法。

在前一章里,我們學到了如何使用對象構造器

實例

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
var myFather = new Person("Bill", "Gates", 62, "blue");
var myMother = new Person("Steve", "Jobs", 56, "green");

親自試一試

我們已經認識到,您無法為已有的對象構造器添加新屬性:

實例

Person.nationality = "English";

親自試一試

如需向構造器添加一個新屬性,則必須把它添加到構造器函數:

實例

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    this.nationality = "English";
}

親自試一試

原型繼承

所有 JavaScript 對象都從原型繼承屬性和方法。

日期對象繼承自 Date.prototype。數組對象繼承自 Array.prototype。Person 對象繼承自 Person.prototype。

Object.prototype 位于原型繼承鏈的頂端:

日期對象、數組對象和 Person 對象都繼承自 Object.prototype。

向對象添加屬性和方法

有時,您希望向所有給定類型的已有對象添加新屬性(或方法)。

有時,您希望向對象構造器添加新屬性(或方法)。

使用 prototype 屬性

JavaScript prototype 屬性允許您為對象構造器添加新屬性:

實例

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";

親自試一試

JavaScript prototype 屬性也允許您為對象構造器添加新方法:

實例

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
    return this.firstName + " " + this.lastName;
};

親自試一試

請只修改您自己的原型。絕不要修改標準 JavaScript 對象的原型。