作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用看起来像这样的模式(伪示例):
var FOO = (function(foo) {
var foo = foo || {},
setThis = 'someValue';
//--------------------------------------------------------------------------
//
// Public methods:
//
//--------------------------------------------------------------------------
foo.init = function(bar) {
this.blah = [];
// Constructor stuff here...
};
foo.doSomething = function(bar) {
if (bar) {
this.doSomethingElse();
// Stuff here...
}
};
foo.doSomethingElse = function() {
// Stuff here...
};
//--------------------------------------------------------------------------
//
// Private methods:
//
//--------------------------------------------------------------------------
foo._imPrivate = function() {
// ... stuff here ...
this.blah = xyz; // References this.
};
foo._morePrivate = function(el) {
// No reference to this.
};
foo._otherPrivate = function(el) {
// No reference to this.
};
return foo; // Expose the methods.
}(FOO || {}));
像这样实例化:
window.onload = function() { FOO.init(stuff); }
三个问题:
this
,我是否应该将它们设为“标准”函数(即 function _imPrivate() { ... }
,例如)? 我问的原因:我有几个方法引用了this
,但我不想让它们公开访问;我还有一些不引用 this
的“实用程序”方法...引用 this
的方法可以是标准函数(在模块模式的上下文中)吗? setThis
变量实现 setter 吗?最佳答案
“私有(private)”方法根本不是私有(private)的,它们是公开的。 OP 似乎没有利用立即调用的函数表达式 (IIFE) 提供的闭包。
函数的 this
的值由您调用函数的方式设置,它不是静态的(除非您使用 ES5 绑定(bind))。它与“上下文”无关(至少与 ECMA-262 中使用上下文的方式无关,这是在 javascript 上下文中应如何使用该词)。
道格拉斯克罗克福德的 Private Members in JavaScript会有帮助。
如果您发布了您正在尝试做的事情的真实示例,您可能会获得更多有关如何在其实现中利用模块模式的帮助。
关于Javascript 模块模式 : When to go private with methods? Getters/setters?改进空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621430/
我是一名优秀的程序员,十分优秀!