从同一对象中的另一个函数引用一个对象函数

时间:2017-06-19 04:58:19

标签: javascript

有没有办法在JavaScript中使用以下内容?

function a (){


  return{
    x: function foo(){
      ......
    }

    y: function bar(){
      .......
      .......
      foo()    //Doesn't work
      .....
    }
  }
}

有没有办法在函数bar()中引用foo(),这两个都恰好在同一个返回块中?

1 个答案:

答案 0 :(得分:1)

如果 bar将始终/仅作为表达式的一部分进行调用,在对象上查找或以任何其他方式确保{{1}在调用期间引用对象,例如:

this

theObject.y(); // Since you've called the property `y`

然后您可以使用var b = theObject.y.bind(theObject); b(); 中的this.x()来运行bar(因为您已使用foo而不是x作为自己的名称) :



foo




当你这样做时,function a() { return { x: function foo(){ console.log("I'm foo"); }, y: function bar(){ console.log("I'm bar, calling foo"); this.x(); } }; } var obj = a(); obj.y();也将引用this中的对象,如果你需要引用其他对象属性,这将很方便。

如果foo可能以不同的方式调用,那么您可能希望单独定义函数,然后将它们组合在一个对象中:

bar

示例:



function a() {
  function foo(){
    // ......
  }

  function bar(){
    // .......
    // .......
    foo();
    // .....
  }

  return { x: foo, y: bar };
}




以这种方式调用function a() { function foo(){ console.log("I'm foo"); } function bar(){ console.log("I'm bar, about to call foo"); foo(); } return { x: foo, y: bar }; } var obj = a(); obj.y();时,foo将是this(在严格模式下)或对全局对象的引用(在松散模式下),而不是对象的引用;如果您需要对该对象的引用,则有多种方法可以执行此操作,例如将其分配给undefinedfoo都关闭的变量。