我正在尝试定义一种方法,我可以控制对工作中使用的javascript方法的访问(编码标准改进驱动的一部分)。
我计划使用的模式很好,直到我想到我们使用第三方脚本方法做什么。
如何调整我的代码以允许从jQuery方法内部访问私有函数?
var NameSpace = new function () {
// My private function I want to access.
var privateFunction = function () {
};
this.publicFunction = function () {
// I can access my private function here.
privateFunction();
jQuery(window).resize(function () {
// But not here :(
privateFunction();
});
};
};
答案 0 :(得分:10)
// I can access my private function here.
privateFunction();
jQuery(window).resize(function () {
// But not here :(
privateFunction();
});
是的,你可以。 JavaScript是静态范围的。您可以在该调整大小回调中访问每个封闭范围的所有变量和函数,包括privateFunction
(只要您没有通过在嵌套范围中定义privateFunction
来遮蔽它。)
您不能做的是访问封闭函数之外的任何局部变量。
我正在尝试定义一种方法,我可以控制对工作中使用的javascript方法的访问(编码标准改进驱动的一部分)。
我认为这是毫无意义的练习。
命名空间有助于避免不必要的名称冲突。真正的“私人”成员是严格执行严格的安全边界。但这是JavaScript:您不是在运行具有不同访问级别和沙盒的代码,就像您在Java中一样。您不必盲目地在JavaScript中重现Java的安全模型。这里的'攻击者'是谁?自己呢?你团队中的其他程序员?
数据隐藏和封装是很好的做法,但您不需要严格执行私有性来实现此目的。实际上,拥有真正的私有化可能会使调试和原型设计任务变得更加困难。考虑类似Python的方法,您只需标记不应从外部使用的成员,例如使用前导下划线。任何使用伪私人成员的人都知道他们正在做他们不应该做的事情,并且希望这样做有一个很好的临时理由。