<meta charset="utf-8">
構(gòu)造函數(shù)是一個特殊的函數(shù)力奋,主要用來初始化對象终畅,即為對象變量賦初始值籍胯,它總和new一起使用竟闪。我們把對象中的一些公共屬性和方法抽取出來,然后封裝到這個函數(shù)里杖狼。
使用構(gòu)造函數(shù)炼蛤,注意兩點:
1,構(gòu)造函數(shù)用于創(chuàng)建某一類對象蝶涩,首字母大寫理朋;
2,構(gòu)造函數(shù)要和new一起使用才有意義
創(chuàng)建對象的三種方法:
//1绿聘,利用new Object() 創(chuàng)建對象
var obj1 = new Object();
//2嗽上,利用對象字面量創(chuàng)建對象
var obj2 = {};
//3,利用構(gòu)造函數(shù)創(chuàng)建對象
function Star(uname, age){
this.uname = uname;
this.age = age;
this.sing = function(){
console.log('我會唱歌');
}
}
var ldh = new Star('劉德華', 18);
var zxy = new Star('張學(xué)友', 20);
console.log(ldh);
ldh.sing();
console.log(zxy);
zxy.sing();
new在構(gòu)造函數(shù)中做了4件事:
1熄攘,在內(nèi)存中創(chuàng)建了一個新的空對象兽愤,
2,讓this指向這個新對象挪圾,
3浅萧,執(zhí)行構(gòu)造函數(shù)里面的代碼,給這個新對象添加屬性和方法哲思,
4洼畅,返回這個新對象(所以構(gòu)造函數(shù)不需要return)。
實例成員和靜態(tài)成員:
//構(gòu)造函數(shù)中的屬性和方法我們稱為成員也殖,成員可以添加
function Star(uname, age){
this.uname = uname;
this.age = age;
this.sing = function(){
console.log('我會唱歌');
}
}
var ldh = new Star('劉德華', 18);
//實例成員就是構(gòu)造函數(shù)內(nèi)部通過this添加的成員土思,uname age sing就是實例成員
//實例成員只能通過實例化的對象來訪問
console.log(ldh.uname);
ldh.sing();
//靜態(tài)成員 在構(gòu)造函數(shù)本身添加的成員
Star.sex = '男';
//靜態(tài)成員只能通過構(gòu)造函數(shù)來訪問务热,不能通過對象來訪問
console.log(Star.sex);
js中每個構(gòu)造函數(shù)都有一個prototype屬性忆嗜,指向另一個對象,這就是原型對象崎岂,我們把不變的方法直接定義在prototype對象上捆毫,這樣所有的對象實例就可以共享這些方法。
function Star(uname, age){
this.uname = uname;
this.age = age;
}
//原型對象
Star.prototype.sing = function(){
console.log('我是歌手');
}
var ldh = new Star('劉德華', 18);
var zxy = new Star('張學(xué)友', 20);
ldh.sing();
zxy.sing();
原型對象最大的優(yōu)點就是共享方法冲甘,不需要再開辟新的內(nèi)存空間绩卤。