6

リテラルオブジェクトで、ネストされたプロパティ/関数内で「this」を使用して関数を参照しようとすると、これは機能しません。なんで?ネストされたプロパティには独自のスコープがありますか?

たとえば、d.f2の内部からf1を呼び出したいと思います。

var object = {    

  a: "Var a",
  b: "Var b",
  c: "Var c",

  f1: function() {
    alert("This is f1");
  },

  d: {
      f2: function() {
       this.f1();
    }
  },

  e: {
      f3: function() {
        alert("This is f3");
     }
  }
}

object.f1(); //作業
object.d.f2(); //動作しません。object.e.f3(); // 仕事

ありがとう、アンドレア。

4

2 に答える 2

9

thisd内部を指し、ではf2ありませんobject。オブジェクトへの参照を保存するか、object直接呼び出すか、call/を使用して関数を呼び出し、その関数内で何を意味するapplyかを明示的に伝えることができます。this

object.d.f2.call(object); // now this refers to object inside f2
于 2010-04-18T10:28:48.647 に答える
4

@ slaver113のアイデアに基づいて、this内部のコンテキストを変更しない代替アプローチを次に示します。f2()

var object = (function() {
  var _this = {
    f1: function() {
      alert('This is f1');
    },
    d: {
      f2: function() {
        _this.f1();
      }
    }
  }

  return _this;
})();

object.d.f2(); // Alerts 'This is f1'
于 2013-09-18T05:33:06.810 に答える