函数调用对象中的函数

时间:2013-01-17 21:00:39

标签: javascript

假设我有一个Javascript对象(花括号表明它是这样的):

{
   a: function (something) {
      return something*2;
   },
   b: function () {
      var c = this.a(2);      //Does not work. Why?
      return c;
   }
}

对此有哪些解决方法?

2 个答案:

答案 0 :(得分:2)

它不起作用,因为当您访问方法b时,它的上下文不是您创建的对象的实例,它将尝试在绑定的上下文或window对象中进行搜索。

var x = {
   a: function (something) {
      return something*2;
   },
   b: function () {
      var c = x.a(2);      //Does not work. Why?
      return c;
   }
}

这样您就可以使用x作为上下文来访问方法a

或者您可以使用new运算符来创建对象和方法作为原型或直接方法。

当你这样做时,结果将是:

var x = function() {
    return {
       a: function (something) {
          return something*2;
       },
       b: function () {
          var c = this.a(2);      //Does not work. Why?
          return c;
       }
    }
}

当你创建一个新实例时,它会让你从prototype丢失x,但你的代码会有效。

示例:

var y = new x();
console.log(y.b());

答案 1 :(得分:1)

它适用于我,在a声明之后你错过了昏迷。

{
   a: function (something) {
      return something*2;
   }, // -> this one
   b: function () {
      var c = this.a(2);
      return c;
   }
}

如果您致电b,该功能应返回a(2),即2 * 2 = 4

alert(p.b());

http://jsfiddle.net/PNbXj/