文字对象内的嵌套函数

时间:2010-04-18 10:13:37

标签: javascript object function nested 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");
     }
  }
}

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

谢谢,安德烈。

2 个答案:

答案 0 :(得分:9)

this引用d内的f2而非object。您可以存储对象的引用,或直接调用object,或使用call / apply来调用该函数,并明确告诉它this在该函数中的含义:< / p>

object.d.f2.call(object); // now this refers to object inside f2

答案 1 :(得分:4)

这是一种替代方法,它不会根据@slaver113's idea更改thisf2()的内容:

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'