天天看點

JavaScript prototype(原型對象)

所有的 JavaScript 對象都會從一個 prototype(原型對象)中繼承屬性和方法。

在前面的章節中我們學會了如何使用對象的構造器(constructor):

function Person(first, last, age, eyecolor) {

this.firstName = first;

this.lastName = last;

this.age = age;

this.eyeColor = eyecolor;

}

var myFather = new Person("John", "Doe", 50, "blue");

var myMother = new Person("Sally", "Rally", 48, "green");

我們也知道在一個已存在構造器的對象中是不能添加新的屬性:

Person.nationality = "English";

要添加一個新的屬性需要在在構造器函數中添加:

this.nationality = "English";

所有的 JavaScript 對象都會從一個 prototype(原型對象)中繼承屬性和方法:

<code>Date</code> 對象從 <code>Date.prototype</code> 繼承。

<code>Array</code> 對象從 <code>Array.prototype</code> 繼承。

<code>Person</code> 對象從 <code>Person.prototype</code> 繼承。

所有 JavaScript 中的對象都是位于原型鍊頂端的 Object 的執行個體。

JavaScript 對象有一個指向一個原型對象的鍊。當試圖通路一個對象的屬性時,它不僅僅在該對象上搜尋,還會搜尋該對象的原型,以及該對象的原型的原型,依次層層向上搜尋,直到找到一個名字比對的屬性或到達原型鍊的末尾。

<code>Date</code> 對象, <code>Array</code> 對象, 以及 <code>Person</code> 對象從 <code>Object.prototype</code> 繼承。

有的時候我們想要在所有已經存在的對象添加新的屬性或方法。

另外,有時候我們想要在對象的構造函數中添加屬性或方法。

使用 prototype 屬性就可以給對象的構造函數添加新的屬性:

Person.prototype.nationality = "English";

當然我們也可以使用 prototype 屬性就可以給對象的構造函數添加新的方法:

Person.prototype.name = function() {

return this.firstName + " " + this.lastName;

};