在Javascript中声明此对象的方法时,如何正确引用对象上的方法集?

时间:2014-11-11 21:56:33

标签: javascript oop functional-programming

我猜是基本的。我在模块化应用程序上写作,经常遇到这样的事情:

var foo = {};

foo.do_something = function () {
  //...
};

foo.do_something_else = function () {
  // ...
};

foo.do_all = function () {
  var x = foo.do_something();

  // ...
};

我更喜欢坚持使用这样的函数式编程。

问题:
在其他方法的声明中引用foo上声明的方法是否安全?如何更好地了解如何做到这一点?

谢谢!

2 个答案:

答案 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(立即调用的函数表达式)来创建本地私有作用域,您可以在其中定义所需的内容,而无需担心污染全局作用域,并从内部导出函数或对象根据需要。