文字对象内的嵌套函数

And*_*rea 6 javascript nested function object literals

如果在文字对象中我试图在嵌套属性/函数中使用"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");
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

object.f1(); // Work
object.d.f2(); //不要工作 object.e.f3(); //工作

谢谢,安德烈.

Anu*_*rag 9

thisdf2而不是object.您可以存储对象的引用,或object直接调用,或使用call/ apply来调用该函数并明确告诉它this该函数内部的含义:

object.d.f2.call(object); // now this refers to object inside f2
Run Code Online (Sandbox Code Playgroud)


Wyn*_*ndB 5

这是基于@slaver113 的想法的另一种方法,它不会改变thisinside的上下文: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'
Run Code Online (Sandbox Code Playgroud)

  • 模块模式+1 http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript (2认同)