簡單理解javascript中的原型物件,實現對之間共享屬性和行為
阿新 • • 發佈:2019-02-04
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物件)。通過同一個建構函式創建出來的物件,共享同一個原型物件。原型物件初始化的時候是空的,我們可以在裡面自定義任何屬性和方法,這些方法和屬性都將被該建構函式所建立的物件繼承。如果原型發生了變化,那麼所有例項都會跟著改變。