-1

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

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

解决方法是什么?

4

2 回答 2

2

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

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

这样,您就可以使用xas 上下文来访问方法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;
       }
    }
}

当你创建一个新实例时,它会让你失去prototypefrom x,但你的代码可以工作。

例子:

var y = new x();
console.log(y.b());
于 2013-01-17T21:04:52.593 回答
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/

于 2013-01-17T21:03:36.830 回答