下面这两种构造对象方式具体有什么不同?在实际项目中各有什么区别?

这是第一种:

var myObject={
        value:0,
        increment:function(inc){
            this.value += typeof inc === "number"?inc:1;
        }
    };

这是第二种,感觉不一样,但是又不知道该如何说清楚。

var myObject = function () {
    var value = 0;
    return {
        increment: function (inc) {
            value += typeof inc === "number" ? inc : 1;
        },
        getValue: function () {
            return value;
        }
    }
}();
阅读 3.4k
8 个回答

试一下就知道了。第一种,可以直接通过 myObject.value 获取value 值。第二种,myObject.value 是获取不到的,只能通过 myObject.getValue() 获取。

换句话说,第一种方法,value 是暴露出来的(公开),第二种方法,value 是隐藏起来的(私有)

第一种普通直接构造对象方式,方法和属性都是对外公开的;

第二种通过立即执行函数表达式,利用函数执行形成的私有作用域封装隐藏value。在你调用increment or getValue时会形成闭包,可以访问到之前立即执行函数暂存的value。

第二种通过一个闭包,把一些信息隐藏起来了,去掉结尾的()还能够有构造函数,比较适合有复杂的逻辑的对象

第二个相当于封装了私有变量

很不错的一个问题,哈哈~

第一个的value是公开的,相当于Java类的public字段,第二个的value则把value给私有的,myObject外面无法访问,好比Java的private字段+getter

答案楼上都说了,作为闭包教学用例不错

推荐问题
宣传栏