2015-09-06 87 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/ –