對象是一個容器,封裝了屬性和方法。
屬性是對象的狀態(tài),方法是對象的行為。比如,我們把動物抽象為animal對象,動物的身高、體重等等,就是動物的「屬性」,奔跑、飛翔、覓食等等,就是動物的「方法」。
- 構造函數(shù)
構造函數(shù)就是對象的模板。它專門用于生成實例對象的函數(shù),一個構造函數(shù)可以生成多個實例對象。
var Animal = function() {
this.height = 100;
this.eat = function() {
console.log("eat!!!!");
}
};
構造函數(shù)的特點有兩個:
(1) 函數(shù)體內必須使用「this」關鍵字,代表了所要生成的實例對象。
(2) 生成實例對象的時候,必須使用「new」。
- 基本用法
var dog = new Animal();
dog.height; // 100
一般使用new 構造函數(shù)來創(chuàng)建一個實例對象,那如果聲明的時候沒有加new呢?
var dog = Animal();
dog; // undefined
height; // 100
此時構造函數(shù)Animal里面的this指向了頂層對象(window),所以直接輸出height是100。
- new命令的基本原理
使用「new」命令時,會按以下步驟執(zhí)行:
(1)創(chuàng)建一個空對象,作為將要返回的對象實例。
(2)將這個空對象的原型,指向構造函數(shù)的「prototype」屬性。
(3)將這個空對象賦值給構造函數(shù)內的「this」關鍵字。
(4)開始執(zhí)行構造函數(shù)內的代碼。
如果構造函數(shù)有「return」語句,而且「return」語句后面還跟著一個對象,那么「new」后會返回「return」語句后的對象。否則,就不會例會「return」語句,直接返回「this」對象。
var Animal = function() {
this.height = 100;
this.eat = function() {
console.log("eat!!!!");
}
return 100;
};
(new Animal() === 100); // false
var Animal = function() {
this.height = 100;
this.eat = function() {
console.log("eat!!!!");
}
return {width: 100};
};
(new Animal()).width; // 100
上面代碼構造函數(shù)return了一個新對象,則會返回這個對象,不會返回this對象。