我试图理解为什么这会返回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()调用的。
答案 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的一些好的做法