2015-09-06 124 views
-4

我仍然是JavaScript的新手,我注意到(語法只是我希望)方法的定義方式的一些差異。對象方法的Javascript聲明語法

一些(根據http://www.w3schools.com/js/js_object_methods.asp)被定義爲

MyObj = function(){ 
    myMethod: function(){...} 
} 

而其他時候,他們可能會爲

MyObj = function(){ 
    function myMethod(){...} 
} 

我希望這僅僅是兩個不同的做同樣的事情的方式來定義這也是以相同的方式處理(並在內部表示)。

這是這種情況?

是不是也允許寫的方法在相同的模式類如

MyObj = function(){ 
    myMethod = function(){...} 
} 
+0

你的第一個代碼片段混合了函數和對象字面定義,並且是無效的Javascript(例如,Firefox說* SyntaxError:函數語句需要一個名稱*,因爲它認爲'myMethod:'是一個標籤,後續函數定義中沒有名稱)。 –

+1

這些都不正確。沒有看到你實際詢問的是什麼,我們無法幫助你。 –

+0

也許你想閱讀[this](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)和[this](http://stackoverflow.com/q/1635116/5247200) – David

回答

1

您的兩個例子是不正確的。我懷疑你的意思是:

MyObj = { 
    myMethod: function(){/*...*/} 
}; 

MyObj.myMethod = function myMethod(){/*...*/}; 
// or 
MyObj.myMethod = function(){/*...*/}; 

在第一個例子,一個對象初始化被用於創建對象,並將它賦值給變量MyObj。對象初始值設定項由propertyName: propertyValue形式的一系列屬性初始值設定項組成。在該示例中,屬性名稱是myMethod,屬性值是匿名函數聲明。

在第二個示例中,對象已經存在,我們只需屬性添加到使用正常賦值表達式的現有對象。

在這兩種情況下,是的,你最終會得到一個名爲myMethod的屬性,它指向一個函數。

+0

如果將它聲明爲「MyObj.myMethod = function anotherMethod(){/*...*/}」會發生什麼情況;「該方法的名稱不匹配?這是我的理解,這實際上是使用方法'anotherMethod'來爲屬性分配一個名爲'myMethod'的值。這是怎麼回事?還是有一些我不知道的其他解釋? – WoodMath

+0

如果將它聲明爲「MyObj.myMethod = function anotherMethod(){/*...*/}」會發生什麼?該方法的名稱不匹配?這是我的理解,這實際上是使用方法'anotherMethod'來爲屬性分配一個名爲'myMethod'的值。這是怎麼回事?還是有一些我不知道的其他解釋? – WoodMath

+1

@WoodMath:函數的名稱與它可能分配給的屬性名稱沒有關係。在那個例子中,你有一個*命名的函數表達式*。你可以在這裏瞭解更多關於它們的信息:https://kangax.github.io/nfe/ –