首頁 > web前端 > js教程 > javascript中使用new與不使用實例化物件的差異_javascript技巧

javascript中使用new與不使用實例化物件的差異_javascript技巧

WBOY
發布: 2016-05-16 15:53:43
原創
2206 人瀏覽過

我們先來看個實例

function Me(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
}

登入後複製

請問這以下兩種實例化物件方式有什麼差別呢?

var mefun1 = new Me('fei','20','it');
var mefun2 = Me('fei','20','it');

登入後複製

簡單的說

第一種是建構函式,即透過new運算子呼叫建構函式Function來建立函式
第二種不是實例化,只是呼叫函數把回傳值賦給變數。

再擴充下

JavaScript 中並沒有真正的類,但JavaScript 中有建構子和new 運算子。建構函式用來給實例物件初始化屬性和值。任何JavaScript 函數都可以用來做建構函數,建構函式必須使用new 運算子作為前綴來建立新的實例。

new 運算子改變了函數的執行上下文,同時改變了return 語句的行為。實際上,使用new和建構子很類似傳統的實作了類別的語言:

// 实例化一个Me
var alice = new Me('alice', 18, 'Coder');
// 检查这个实例
assert( alice instanceof Me );

登入後複製

建構子的命名通常使用駝峰命名法,首字母大寫,以此和普通的函數區分開來,這是
一種習慣用法。

// 不要这么做!
Me('alice', 18, 'Coder'); //=> undefined

登入後複製

這個函數只會回傳undefined,執行上下文是window(全域)對象,無意間創建了3個全域變數name,age,job。呼叫建構函式時不要丟掉new 關鍵字。

當使用new 關鍵字來呼叫建構函式時,執行上下文從全域物件(window)變成一個空的上下文,這個上下文代表了新產生的實例。因此,this 關鍵字指向目前建立的實例。儘管理解起來有些繞,實際上其他語言內置類機制的實作也是如此。

預設情況下,如果你的建構函式中沒有回傳任何內容,就會回傳this-目前的上下文。

不然就傳回任意非原始型別的值.

以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板