Javascript'这个'返回窗口而不是我的对象

时间:2014-09-25 17:05:03

标签: javascript this

我试图理解为什么这会返回Window而不是我的对象。看看我之前的例子,这是有效的。我必须遗漏一些明显的东西。



(function($) {
  if (typeof a === "undefined" || a === null) a = {};
  if (typeof a.b === "undefined" || a.b === null) a.b = {};
  if (typeof a.b.c === "undefined" || a.b.c === null) a.b.c = {};
  if (typeof a.b.c.d === "undefined" || a.b.c.d === null) a.b.c.d = {};
  if (typeof a.b.c.d.e === "undefined" || a.b.c.d.e === null) a.b.c.d.e = {};

  a.b.c.d.e.MyObject = {
    method1: function() {
      console.log(this); //Returning Window
    },

    method2: function() {

    }
  }
}(jQuery));



     

这是通过另一个JS文件中的eval()调用的。

2 个答案:

答案 0 :(得分:0)

感谢@Lee Tayor和@Pointy,我找到了解决问题的方法。由于我能够通过eval()调用控制调用的内容,因此修改了eval以调用以下内容:



function initMyObject() {
  a.b.c.d.e.MyObject.method1();
}




答案 1 :(得分:0)

我认为你已经有了答案,但我认为你应该真正了解JS对象的创建方式。 如果您使用的是eval,我强烈建议不要使用它,除非您真的知道自己在做什么 要创建对象,请使用:

var MyClass = function () {
     this.attr = 'Hello World!';
}

var myObject = new MyClass(); //Remember the new!!!!

方法声明如下(在创建新对象之前执行此操作):

MyClass.prototype.myMethod = function () {
     return this.attr;
}

这样,“this”将引用该对象而不是该函数的执行范围。 仔细看看JS对象,请参阅JavaScript: The Good Parts以获得使用js的一些好的做法