【问题标题】:Access an internal function within an array of functions访问函数数组中的内部函数
【发布时间】:2019-04-07 03:28:43
【问题描述】:

我有以下代码,它是一个具有函数数组的变量,但我无法访问它们,发送错误。我需要他们之间的帮助,但在尝试访问其中一个时向我发送错误消息。

var mivarobject = function(){
  this.helpers = {
    function1: function(){
      return 1;
    },
    function2: function(){
      return this.helpers.function1() + 1;
    },
  };
};

console.log((new mivarobject()).helpers.function2());

他们之间如何访问?

【问题讨论】:

  • 你已经问过了......stackoverflow.com/questions/55555219/… - 哦,等等......你已经从那里得到了答案,现在正在尝试做其他事情,对不起 - 你需要学习如何@987654323 @作品
  • 不,这是另一个非常不同的问题,我需要在另一个内部调用一个函数
  • 它并没有太大的不同,它是前一个的延续 :p 但是 ... function2: function(){ return this.helpers.function1() + 1; }.bind(this)function2: () => { return this.helpers.function1() + 1; } 就足够了
  • @JaromandaX 天哪!.bind(this)? ,为什么?
  • 您这样做是有原因的,而不是像普通类一样将方法放在mivarobject 原型上?看起来你正在为自己做更多的工作。

标签: javascript function object


【解决方案1】:

使用bind 或箭头函数:

var mivarobject = function() {
  this.helpers = {
    function1: function() {
      return 1;
    },
    function2: function() {
      return this.helpers.function1() + 1;
    }.bind(this),
  };
};

console.log((new mivarobject()).helpers.function2());

var mivarobject = function() {
  this.helpers = {
    function1: function() {
      return 1;
    },
    function2: () => this.helpers.function1() + 1,
  };
};

console.log((new mivarobject()).helpers.function2());

【讨论】:

    【解决方案2】:

    如果您将function2 作为helpers 的方法调用,则其this 值将设置为helpers。如果function2 想调用helpers 的另一个方法,它可以作为this 的属性来访问。基本上,对this.helpers 的引用既多余又不正确。

    将function2定义改为

    function2: function(){
      return this.function1() + 1;
    }
    

    它会按预期工作。

    【讨论】:

    • 这个解决方案对我来说更具吸引力和理解性,虽然我在数组中有几组函数,例如'helpers'、'funcs'、'actions',然后这些函数在它们之间被内部调用. Jaromanda XJack Bashford 的解决方案满足了这一点。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多