为了账号安全,请及时绑定邮箱和手机立即绑定

怎么理解模块中保护私有方法只向外暴露接口~

怎么理解模块中保护私有方法只向外暴露接口~

芜湖不芜 2018-10-09 17:15:17
就以 AMD 的模块为例:define(function () {    var test = {        val: 233,                getVal: function () {            return this.val;        },                setVal: function () {            this.val = 'abc';        }    };        return test;});上边的做法是不是不好 不应该整个返回整个 test 对象 这样外部是可以直接操作 val 属性的 正确的做法是什么?~我看大家都 return {}; 一个对象回去 这是为什么 不能直接 return function (){}; 回去吗 还是说返回对象的话是方便后续扩展~如果我想在模块里写一个面向对象的话 最终不还是得返回这个对象以供外部去 new 吗 那这么说面向对象写法默认就是公开的呗~能列举几点模块的优点和弊端吗 如果我都暴露出去了 原生的写法就比如面向对象 不就默认都是公开的吗~
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

上面那个做法等于没有用模块……js的私有变量都是用闭包来模拟的,你的上面那个改成这样就可以了。

define(function () {

    var val = 123;

    

    var test = {

        getVal: function () {

            return val;

        },

        

        setVal: function () {

            val = 'abc';

        }

    };

    

    return test;

});

这样的话,外面是无法直接访问到变量val的,只能通过你对外暴露的两个函数:getValsetVal来进行访问和修改。

返回对象的原因一个就是你说的方便扩展,还有一个就是对外暴露的api通常不止一个,除了对象还有别的玩意儿能实现吗?

至于return function (){};这是什么……没看懂。


查看完整回答
反对 回复 2018-11-17
  • 1 回答
  • 0 关注
  • 469 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信