对象和函数之间调用方法的区别

时间:2015-04-23 03:33:53

标签: javascript

以下是代码和fiddle

var test = {
    value : "sss", 
    func1 : function(){
        console.log(this.value);
    }   
};

var test2 = function(){
    return {
        value : "sss",
        func1 : function(){
            console.log(this.value);
        }
    };
}();

test.func1();
test2.func1();

嘿小伙子们,这两种方法调用方式之间的区别是什么。 我必须将test2作为Inmmediate Invoke Function Execution来确保它的工作原理。这是否意味着将煤炭运到纽卡斯尔?哪一个更好或者我应该使用它们?

3 个答案:

答案 0 :(得分:2)

  嘿小伙子们,这两种方法之间的区别是什么   呼叫。

两个结果对象之间没有显着差异,因为您现在拥有它们。

  

哪一个更好或者我应该使用它们?

第二种方案为您提供了在闭包中使用一些私有变量的选项,您的方法可以像这样使用:

var test2 = function(){
    var cnt = 0;
    return {
        value : "sss",
        func1 : function(){
            console.log(this.value);
        },
        getCnt: function() {
            return ++cnt;
        }
    };
}();

test2.getCnt();    // 1
test2.getCnt();    // 2

当您需要这些私有变量时,您将使用第二种方案。否则,第一个选项稍微简单一点,并且涉及少一个函数调用。

答案 1 :(得分:0)

在第一种方法中,如果将其分配给prototype,它将使用全局Object覆盖您的构造函数。这将是需要注意的事项。

第二种方法没有这个问题。

这是我写的一篇文章,详细讨论了这个问题:https://codereview.stackexchange.com/questions/62402/javascript-constructor-and-namespace-in-object-literal-style/86222#86222

答案 2 :(得分:0)

第一个是具有已定义属性和方法的简单对象文字。 请参阅:Object Literals

第二个是立即调用函数表达式(IIFE)  使用它的属性和方法返回一个对象文字。

当您想要使用另一个时,它是当前情况的米,但是第二个允许您拥有私人"东西"并用于Revealing Module Pattern