Javascript'这个'返回窗口,而不是我的对象
我想了解为什么这是返回窗口而不是我的对象。看看我以前的例子,这是工作。我必须失去一些明显的东西。 Javascript'这个'返回窗口,而不是我的对象
(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));
这是正在通过的eval()从另一个JS文件调用。
感谢@Lee Tayor和@Pointy,我找到了解决我的问题的方法。既然我能控制哪些正在通过的eval()调用叫,我修改了EVAL调用下面:
function initMyObject() {
a.b.c.d.e.MyObject.method1();
}
我想你已经有答案了,但我认为你应该拿一个看看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一起使用的一些良好实践
我知道eval的含义,不幸的是我写的代码正在集成到现有的框架中,并且我无法修改核心产品。 – mgoodric 2014-09-25 18:43:48
运气不好。希望对象定义有所帮助 – donnanicolas 2014-09-25 18:50:14
您尚未显示如何调用'method1'。这可能会使所有区别... – 2014-09-25 17:07:01
页面加载时有一个调用a.b.c.d.e.MyObject.method1 – mgoodric 2014-09-25 17:09:15
如果这是因为你做了像'window.onload = a.b.c.d.e.MyObject.method1;'那么这就是问题所在。 'this'的值由函数**调用**的方式确定,而不是按照定义的方式确定。 – Pointy 2014-09-25 17:10:31