gpt4 book ai didi

Javascript 模块模式 : When to go private with methods? Getters/setters?改进空间?

转载 作者:行者123 更新时间:2023-11-30 08:58:10 25 4
gpt4 key购买 nike

我正在使用看起来像这样的模式(伪示例):

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); }

三个问题:

  1. 如果我的“私有(private)”方法不引用 this,我是否应该将它们设为“标准”函数(即 function _imPrivate() { ... },例如)? 我问的原因:我有几个方法引用了this,但我不想让它们公开访问;我还有一些不引用 this 的“实用程序”方法...引用 this 的方法可以是标准函数(在模块模式的上下文中)吗?
  2. 有人可以举例说明我如何为 setThis 变量实现 setter 吗?
  3. 您认为上述代码还有改进的余地吗?

最佳答案

“私有(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com