1. 程式人生 > >簡單理解javascript中的原型物件,實現對之間共享屬性和行為

簡單理解javascript中的原型物件,實現對之間共享屬性和行為

javascript中提供了建構函式,能夠方便的建立物件。典型的建構函式如下:

function Person(name, age) 
{   
  this.name = name;
  this.age = age;
  this.say = function () {
    return this.name  + ',' + this.age;;
}

之後就可以用new和建構函式建立多個物件。javascript中,類的不同物件之間,屬性和方法都是獨立的。什麼意思呢?java中類的不同物件之間,成員變數是獨立的(每個物件都有自己的儲存空間,儲存屬性值),但是方法是共享的,記憶體中只有一份。但是javascript中,方法也是一個物件一份。如果復建立了多個物件,那麼每個物件中的方法都會在記憶體中開闢新的空間,這樣浪費的空間就比較多。

var p1= new Person('a', 25);
var p2= new Person('b', 22); 
alert(p1.say == p2.say);//結果返回的是false,說明方法記憶體空間也不同



javascript中沒有什麼static和成員變數之分,如果想在物件之間共享資料或方法,只能藉助原型物件,將共享的變數和方法都放在原型物件中。

function User(name,age)
{
    this.name = name;
    this.age = age;
}
User.prototype.addr = 'shenzhen';//在原型中新增屬性
User.prototype.show = function(){//在原型中新增方法
    alert(this.name+'|'+this.age);    
};
var user1 = new User('ZXC',22);
var user2 = new User('CXZ',21);
alert(user1.show == user2.show);//返回 true 說明show方法是共享的

JS的建構函式都有一個prototype屬性,指向它的原型物件(其實就是個普通的JS物件)。通過同一個建構函式創建出來的物件,共享同一個原型物件。原型物件初始化的時候是空的,我們可以在裡面自定義任何屬性和方法,這些方法和屬性都將被該建構函式所建立的物件繼承。如果原型發生了變化,那麼所有例項都會跟著改變。