JavaScript中良好作用域的方式

前端之家收集整理的这篇文章主要介绍了JavaScript中良好作用域的方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不是一个非常好的 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.

猜你在找的JavaScript相关文章