这是第一种:
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;
}
}
}();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
试一下就知道了。第一种,可以直接通过
myObject.value获取value 值。第二种,myObject.value是获取不到的,只能通过myObject.getValue()获取。换句话说,第一种方法,
value是暴露出来的(公开),第二种方法,value是隐藏起来的(私有)第一种普通直接构造对象方式,方法和属性都是对外公开的;
第二种通过立即执行函数表达式,利用函数执行形成的私有作用域封装隐藏value。在你调用increment or getValue时会形成闭包,可以访问到之前立即执行函数暂存的value。
第二种通过一个闭包,把一些信息隐藏起来了,去掉结尾的
()还能够有构造函数,比较适合有复杂的逻辑的对象第二个相当于封装了私有变量
很不错的一个问题,哈哈~
第一个的value是公开的,相当于Java类的public字段,第二个的value则把value给私有的,myObject外面无法访问,好比Java的private字段+getter
答案楼上都说了,作为闭包教学用例不错
111111