模块模式:限制模块被扩展
Module Pattern: Restrict a module from being extended
我一直在阅读 Javascript 中关于设计模式的几篇文章。我发现模块模式很容易 read/write。
我想知道是否有任何方法可以停止扩展 Javascript 中的模块。
这是我一直在使用的脚本:
var MODULE = (function(){
var increment = 0;
var funcIncrement = function(){
increment ++;
console.log(increment);
};
return {
incr: funcIncrement
}
})();
var moduleTwo = (function(MODULE){
MODULE.extension = function(){ //This module will add extension function to MODULE. I don't want this to happen
console.log('extension method');
}
})(MODULE || {});
如果我在 运行 上面的代码片段之后执行 console.log(MODULE)
,那么我会得到两个用于 MODULE (incr, extension)
的函数
有没有办法在第一次声明 MODULE
时限制 MODULE
被扩展?
您可以冻结返回的对象
var MODULE = (function(){
var increment = 0;
var funcIncrement = function(){
increment ++;
console.log(increment);
};
return Object.freeze({
incr: funcIncrement
});
})();
但旧版浏览器不支持。
我一直在阅读 Javascript 中关于设计模式的几篇文章。我发现模块模式很容易 read/write。
我想知道是否有任何方法可以停止扩展 Javascript 中的模块。
这是我一直在使用的脚本:
var MODULE = (function(){
var increment = 0;
var funcIncrement = function(){
increment ++;
console.log(increment);
};
return {
incr: funcIncrement
}
})();
var moduleTwo = (function(MODULE){
MODULE.extension = function(){ //This module will add extension function to MODULE. I don't want this to happen
console.log('extension method');
}
})(MODULE || {});
如果我在 运行 上面的代码片段之后执行 console.log(MODULE)
,那么我会得到两个用于 MODULE (incr, extension)
有没有办法在第一次声明 MODULE
时限制 MODULE
被扩展?
您可以冻结返回的对象
var MODULE = (function(){
var increment = 0;
var funcIncrement = function(){
increment ++;
console.log(increment);
};
return Object.freeze({
incr: funcIncrement
});
})();
但旧版浏览器不支持。