javascript - 下面这两种构造对象方式具体有什么不同?在实际项目中各有什么区别?
阿神
阿神 2017-04-11 11:56:45
[JavaScript讨论组]

这是第一种:

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;
        }
    }
}();
阿神
阿神

闭关修行中......

全部回复(8)
天蓬老师

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

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

天蓬老师

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

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

怪我咯

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

天蓬老师

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

阿神

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

PHPz

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

ringa_lee

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

大家讲道理

111111

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号