實例對象與new命令

對象是一個容器,封裝了屬性和方法。
屬性是對象的狀態(tài),方法是對象的行為。比如,我們把動物抽象為animal對象,動物的身高、體重等等,就是動物的「屬性」,奔跑、飛翔、覓食等等,就是動物的「方法」。

  1. 構造函數(shù)
    構造函數(shù)就是對象的模板。它專門用于生成實例對象的函數(shù),一個構造函數(shù)可以生成多個實例對象。
var Animal = function() {
  this.height = 100;
  this.eat = function() {
    console.log("eat!!!!");
  }
};

構造函數(shù)的特點有兩個:
(1) 函數(shù)體內必須使用「this」關鍵字,代表了所要生成的實例對象。
(2) 生成實例對象的時候,必須使用「new」。

  1. 基本用法
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。

  1. 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對象。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容