这两个Javascript语句有什么区别?

3
除了使用上的纯偏好外,这两个片段之间有什么区别吗?我看到这两种用法都被广泛使用,但是除了可读性方面的个人偏好之外,我不确定它们如何/为什么不同。
object.foo = function () {

    //code

}

foo : function () {

    //code

}

4
我明白了,您的意思是第二个应该用object = {}包裹起来吗?如果是这样的话,那它们就完全一样了。 - Reinstate Monica Cellio
单独的第二个语句不是有效的语法。就像@Archer所说,如果它被包装在object = {}中,那么它将与第一个语句相同。 - Curtis
啊,是的,你说得对!我完全忽略了这些对象的包装。不过,当你在对象内部分配属性时,说foo = function() {}和foo: function() {}是一样的吗? - Bradley
1
是的,这完全是一样的东西。通常在声明对象时使用第二种方法,在稍后扩展它时使用第一种方法(如果需要)。 - Reinstate Monica Cellio
啊,太棒了!所以=和:只是个人偏好,知道了就好。 - Bradley
不,它们的语法完全不同。请看下面我的回答,会有更多细节。 - Reinstate Monica Cellio
2个回答

4
这是:

object = {
    foo : function () {
        // code
    }
}

这是完整的写法,意思是在对象初始化时定义函数。

以下是代码:

object.foo = function () {
    //code
}

可以作为一种速记方式使用,如果您想在对象的声明之后动态声明函数,也可以使用它。


1
在你提供的例子中,它们做的事情完全相同,但是有一些细微的差别可以解释为什么似乎有两种做同样事情的方式。
以这个例子为例...
var obj = {
    foo: function() {
        // do something
    }
};

您可以像这样扩展该对象...
obj.bar = function() {
    // do something different
};

但如果你这样做了...

obj = {
    bar: function() {
        // do something different
    }
};

如果你使用 var obj = {}; 这种方法来创建一个对象,那么你会失去 foo 函数。因此,一种方法是显式声明一个对象,包括属性和函数,另一种方法则可用于扩展现有对象。
只为了完全清楚起见,这是不正确的语法...
var obj = {
    foo = function() {    // it should be foo: function() {}
        // do something
    }
};

在您的第三个例子中,您可以用 bar = function() {} 替换 bar: function() {} 并且仍然有效吗?那就是我之前问的,如果没有表达清楚,抱歉。编辑:您通过编辑回答了我的问题,谢谢! - Bradley
1
我刚刚在结尾添加了一点内容,以涵盖 := 的问题。这是对象声明语法的问题。在花括号外面使用 =,但在里面使用 : - Reinstate Monica Cellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接