我不是一个非常好的
JavaScript用户,但我可以用它完成任务.我对我用JavaScript编写的代码感到自豪,所以我决定改变它.这是我的第一步:
我正在尝试为项目创建自己的库,下面是初始结构.
window.fooLib = {}; (function (foo) { "use strict"; foo.doSomeStuff = function(param1) { console.log(new AccommProperty(param1)); } //some internal function function AccommProperty(nameValue) { var _self = this; _self.name = nameValue; } }(fooLib));
我在这里使用了立即调用的函数表达式来初始化我的变量.在这种情况下,它是fooLib.
我不确定是否应该做一些其他事情来使window.fooLib更安全.我的意思是,如果我正确理解JavaScript,它可以被我的代码之后运行的任何其他代码覆盖.
你的想法是什么?
解决方法
如果要防止覆盖变量,可以使用
Object.defineProperty()
with writable:false,configurable:false.在你的情况下:
(function () { "use strict"; var foo = {}; //some internal function function AccommProperty(nameValue) { var _self = this; _self.name = nameValue; } foo.doSomeStuff = function(param1) { console.log(new AccommProperty(param1)); } Object.defineProperty(window,"foolib",{value:foo}); }());
尽管如此,没有充分的理由.它需要EcamScript 5.1才能工作,并且没有任何垫片;也许是getter / setter的东西,以防止使用=运算符覆盖.
但是,也没有必要让你的图书馆不可覆盖.只是不要使用覆盖lib的站点上的代码.或者有人甚至想用另一个更好的lib用相同的接口覆盖你的函数?
如果问题是关于要共享的库,可能与其他人发生名称空间冲突,您可以查看jQuery.noConflict.