2017-08-10 100 views
-1

使用對象文字和使用構造函數創建對象(理論上)以及何時使用它們之間的區別是什麼?Object Literals - Vs - 構造函數

我不是指我們如何使用它們。我的意思是他們如何在幕後工作,以及他們的機制如何不同!

+0

有[許多重複](https://stackoverflow.com/search?q=%5Bjavascript%5D+literal+vs+constructor)。 – RobG

+0

我不是在說如何使用它們。我正在談論當我使用他們兩個時在js幕後發生的事情。我問我的問題,因爲我發現沒有其他問題是爲了我要找的點... 所以我的問題不是重複的! –

+0

如果您想回答問題,則編輯該問題。 –

回答

1

基本上 - 在ES2015之前 - 使用對象文字創建對象時,您無法向對象添加方法。

由於ES2015的是可以添加的方法來反對文字,這使得對象文字和類聲明八九不離十:

var obj = { 
    // __proto__ 
    __proto__: theProtoObj, 
    // Shorthand for ‘handler: handler’ 
    handler, 
    // Methods 
    toString() { 
    // Super calls 
    return 'd ' + super.toString(); 
    }, 
    // Computed (dynamic) property names 
    [ 'prop_' + (() => 42)() ]: 42 
}; 

另一個重要的事情是,當你想創建一個類的實例 - 你會想要基於該類聲明創建類聲明和初始化對象。

+0

很高興指出ECMAScript 2015中引入的功能,大部分副本都有點舊。對象初始值設定項的附加功能也包含在[* MDN *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer)中。儘管謹慎使用'__proto__',它是[* ECMA-262 *附錄]中的擴展(http://ecma-international.org/ecma-262/8.0/#sec-__proto__-property-names-在-對象初始化)。 – RobG