一虾标、關(guān)鍵知識(shí)點(diǎn)說明
1、每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象與之對(duì)應(yīng)叮阅;
2、每個(gè)構(gòu)造函數(shù)都存在一個(gè)可以訪問的prototype屬性泣特,該屬性指向構(gòu)造函數(shù)的原型對(duì)象
3浩姥、構(gòu)造函數(shù)的原型對(duì)象有一個(gè)可以訪問的、指向構(gòu)造函數(shù)原型的屬性constructor
4状您、任何一個(gè)對(duì)象的實(shí)例都有一個(gè)隱藏不可訪問的prototype指針勒叠,指向構(gòu)造函數(shù)的原型對(duì)象
二、構(gòu)造函數(shù)申明:
不帶參數(shù)的構(gòu)造函數(shù)聲明
function Student(){
this.name="張三";
this.age="18";
this.sex="男";
this.sayName = function(){
console.log(this.name);
}
}
帶參數(shù)的構(gòu)造函數(shù)聲明
function Student(_name,_age,_sex){
this.name=_name;
this.age=_age;
this.sex=_sex;
this.sayName = function(){
console.log(this.name);
}
}
聲明一個(gè)構(gòu)造函數(shù)在瀏覽器全局作用域下會(huì)生成以下幾個(gè)對(duì)象竞阐,如下圖所示
Student函數(shù)會(huì)自動(dòng)產(chǎn)生一個(gè)prototype屬性缴饭,該屬性指向一個(gè)Studentd的原型對(duì)象Prototype。Prototype對(duì)象的constructor屬性指向Student構(gòu)造函數(shù)骆莹。
三颗搂、當(dāng)定義好構(gòu)造函數(shù)后就可以根據(jù)構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象實(shí)例
var student1 = new Student();
var student2 = new Student('張三',18,'男');
new 關(guān)鍵字創(chuàng)建對(duì)象會(huì)在瀏覽器全局作用域產(chǎn)生兩個(gè)變量,變量的protottype屬性指向Student構(gòu)造函數(shù)的原型對(duì)象幕垦。對(duì)象關(guān)系圖如下所示:
四丢氢、可以擴(kuò)展一個(gè)構(gòu)造函數(shù)的原型對(duì)象
在圖一中我們聲明一個(gè)函數(shù)時(shí)會(huì)創(chuàng)建一個(gè)prototype屬性,該屬性指向構(gòu)造函數(shù)的原型對(duì)象先改。因此我們可以通過prototype屬性來擴(kuò)展Student對(duì)象疚察。
//擴(kuò)展學(xué)生對(duì)象的身高變量
Student.prototype.height = 1.8;
//擴(kuò)展學(xué)生報(bào)報(bào)告自己的身高函數(shù)
Student.prototype.sayHeight = function(){
console.log(this.height);
}
擴(kuò)展原型對(duì)象關(guān)系圖如下圖所示