就以 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 吗 那这么说面向对象写法默认就是公开的呗~
能列举几点模块的优点和弊端吗 如果我都暴露出去了 原生的写法就比如面向对象 不就默认都是公开的吗~
上面那个做法等于没有用模块……js的私有变量都是用闭包来模拟的,你的上面那个改成这样就可以了。
这样的话,外面是无法直接访问到变量
val
的,只能通过你对外暴露的两个函数:getVal
和setVal
来进行访问和修改。返回对象的原因一个就是你说的方便扩展,还有一个就是对外暴露的api通常不止一个,除了对象还有别的玩意儿能实现吗?
至于
return function (){};
这是什么……没看懂。简单的说就是,操作类里的私有属性/成员的时候,需要建立一个对外公开的方法(成员函数)来对它们进行操作。不要把属性做成public的。
最常见的的模块写法(利用自执行函数):
上面的例子中,定义了模块的私有方法和对外接口/公共方法。