[英]Private functions in namespaced javascript
我正在尝试定义一种方法,通过该方法可以控制对我们在工作中使用的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();
});
};
};
// I can access my private function here.
privateFunction();
jQuery(window).resize(function () {
// But not here :(
privateFunction();
});
是的你可以。 JavaScript是静态作用域的。 您可以访问该调整大小的回调中每个封闭作用域的所有变量和函数,包括privateFunction
(只要您没有通过在嵌套作用域中定义privateFunction
来掩盖它)。
您不能做的是访问封闭函数之外的任何局部变量。
我正在尝试定义一种方法,通过该方法可以控制对我们在工作中使用的javascript方法的访问(编码标准改进驱动器的一部分)。
我建议这是没有意义的练习。
Namespacing可以避免不必要的名称冲突。 真正的“私有”成员的目的是严格执行严格的安全边界。 但这是JavaScript:您不会像在Java中那样在此处运行具有不同访问级别和沙箱的代码。 您不必盲目地在JavaScript中重现Java的安全模型。 谁是这里的“攻击者”? 你自己 您团队中的其他编码员?
数据隐藏和封装是一种好习惯,但是您无需严格强制私有即可实现此目的。 确实,拥有真正的私人用户可能会使调试和原型制作任务变得更加困难。 考虑一下类似Python的方法,您可以简单地标记不应从外部使用的成员,例如使用前划线。 任何使用伪私有成员的人都知道他们正在做不应做的事情,并希望有一个很好的临时理由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.