functioncreateperson(name, age) ;
return
o;}
每次呼叫這個函式都會返回乙個包含兩個屬性和乙個方法的物件。
js中的建構函式可以用來建立特定型別的物件,像object和array這樣的原生建構函式,在執行時會自動出現在執行環境中。此外,也是可以建立自定義的建構函式,從而定義自定義物件型別的屬性和方法。
1function
person(name,age)7}
8var person1 = new person("xiaoming","18");
建構函式也是函式,只是呼叫他們的方式不同,任何函式,只要通過new操作符呼叫,則它就可以作為建構函式;不通過new操作符呼叫,則就是普通函式。
1、當做建構函式
1var person1 = new person("xiaoming",18);
2 person1.say(); //
xiaoming
2、當做普通函式
1 person("xiaozhu",20); //新增到window
2 window.say(); //
xiaozhu
我們建立的每乙個函式都有乙個prototype(原型)屬性,這個屬性是乙個指標,指向乙個物件,這個物件包含所有例項共享的屬性和方法。按照字面意思,那麼prototype就是通過呼叫建構函式而建立的物件例項的原型物件。使用它的好處是,可以讓所有物件例項共享原型中所包含的屬性和方法。
1function
person(){}
2 person.prototype.name="xiaoming";
3 person.prototype.age=18;
4 person.prototype.say=function()7
var person1=new
person();
8 person1.say(); //
xiaoming
9var person2 = new
person();
10 person2.say(); //
xiaoming
然而當包含引用型別值的屬性時,就會出現問題;
1function
person(){}
2 person.prototype.name="xiaoming";
3 person.prototype.age=18;
4 person.prototype.eat=['蘋果','橘子'];
5 person.prototype.say=function()8
var person1=new
person();
910 alert(person1.eat); //
蘋果 橘子
11 person1.eat.push("香蕉");
12var person2 = new
person();
13 alert(person2.eat); //
蘋果 橘子 香蕉
可以看到,eat屬性是引用型別的值,當person1更改了eat陣列,則在person2中也能反映出來,然而這並不是我們想要的結果。繼續看。
這種方式能極大解決單獨使用建構函式或者原型模式帶來的問題。這種方式是目前使用最廣泛的方法;組合使用,建構函式用來定義例項屬性,原型模式用來定義方法和共享屬性。這樣每個例項都會有屬於自己的例項屬性副本,而且同時又共享著對方法的引用,最大限度的節省了記憶體。
1function
person(name,age)
6 person.prototype.say=function()9
var person1=new person("xiaoming",18);
10 alert(person1.eat); //
蘋果 橘子
11 person1.eat.push("香蕉");
12var person2 = new
person();
13 alert(person2.eat); //
蘋果 橘子
js 建立物件的幾種方式
一 原始方式 解釋 原始方法建立物件,通過new關鍵字生成乙個物件,然後根據js是動態語言的特性新增屬性和方法,構造乙個物件。其中this是表示呼叫該方法的物件。缺點 多次建立物件,則需要重複 多次,不利於 的復用。二 工廠模式 var getage function var getname fun...
js 建立物件的幾種方式
第一種 工廠模式 例1 function createobj name,age return o var per1 createobj 張三 20 per1.sayinfo 缺點 無法知道物件的型別 第二種 建構函式模式 例2 function person name,age var per2 ne...
js建立物件的幾種方式
雖然object建構函式或物件字面量都可以建立單個物件,但這些方式有個明顯的缺點,那就是使用同乙個介面創造很多物件,會產生大量的重複 所以產生了下面幾種模式。1 工廠模式 function createperson name,age,job o.name name o.age age o.job j...