我猜是基本的。我在模块化应用程序上写作,经常遇到这样的事情:
var foo = {};
foo.do_something = function () {
//...
};
foo.do_something_else = function () {
// ...
};
foo.do_all = function () {
var x = foo.do_something();
// ...
};
我更喜欢坚持使用这样的函数式编程。
问题:
在其他方法的声明中引用foo
上声明的方法是否安全?如何更好地了解如何做到这一点?
谢谢!
答案 0 :(得分:1)
没关系。
您还可以使用引用特定实例的this
关键字。小心this
,因为在执行期间,范围可以改变(因为例如你调用另一个对象的方法......)。
为了避免这种情况,一个好的做法是在方法的第一行中设置赋值var self=this
,然后你总是可以使用self来引用对象实例。
答案 1 :(得分:1)
您可以使用模块方法来实现相同的功能分离,但不必担心不断引用全局名称。
var foo = (function() {
var do_something = function () {
//...
};
var do_something_else = function () {
// ...
};
var do_all = function () {
// Note: can refer to `do_something` directly.
var x = do_something();
// ...
};
return {
do_something: do_something,
do_something_else: do_something_else,
do_all: do_all
};
})();
通常,您可以使用IIFE(立即调用的函数表达式)来创建本地私有作用域,您可以在其中定义所需的内容,而无需担心污染全局作用域,并从内部导出函数或对象根据需要。