-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 に答える