1. 所有對象都有原型對象。
2. 原型對象,就是其它語言中的類中的靜態屬性和靜態方法,總是是靜態-static就對了.原理是: 內存中只有一份.
內存中的圖解:
先寫個構造器:
-
function Person(name, age)
-
{
-
this.name = name;
-
this.age = age;
-
}
-
var A = new Person('A', 18);
-
var B = new Person('B', 28);
-
var C = new Person('C', 38);
-
function Person(name, age)
-
{
-
this.name = name;
-
this.age = age;
-
this.location = '地球';
-
}
-
var A = new Person('A', 18);
-
var B = new Person('B', 28);
-
var C = new Person('C', 38);
三個對象都有一個”地球”的內存空間. 這裏你要動動大腦了, 三個人都有地球的內存,我們是不是可以這樣呢?
原型對象,最重要的作用就是把常量和方法獨立到自身裏. 供給其它 “自己的對象” 使用. 最後如圖:
4. 從代碼上實現。
-
function Person(name, age)
-
{
-
this.name = name;
-
this.age = age;
-
}
-
var A = new Person('A', 18);
-
var B = new Person('B', 28);
-
var C = new Person('C', 38);
-
Person.prototype.location = '地球';
-
Person.prototype.killPerson = function()
-
{
-
console.log('kill!!!');
-
}
-
A.location // 地球
-
A.killPerson() // kill man
-
B.location // 地球
不過前提是,你的對象屬性裏面,沒有定義location和killPerson.不然會把原對象的覆蓋掉
在A.location的時候,首先,我們檢查A對象本身,從圖中我們知道,A有 name, age 和prototype指針屬性. 並沒有location,找不到以後,它會繼續搜索原對象裏面,看能否找到location屬性,如果有,就會調用原對象的屬性.