【发布时间】:2011-06-02 17:27:27
【问题描述】:
好的,我现在讨厌 Javascript,希望有人可以帮助我。
我的代码设置如下:
function Obj1() {
var me = this;
this.something = "yay";
this.getThis = function(){
return me;
}
}
Obj1.prototype.method = function() {
return this.something;
};
function Obj2() {
this.something = "nay";
}
Obj2.prototype.method = function() {
return this.something;
};
var o1 = new Obj1();
var o2 = new Obj2();
document.write(o1.method()); // Returns yay
document.write(o1.method.call(o2)); // Returns nay, but I need "yay" here
(JSFiddle@http://jsfiddle.net/A9u9K/)
我的问题是,我需要在第二种情况下调用 Obj1.method,但我绝对无法获得对该对象的引用:(
我该如何解决这个问题?
编辑:抱歉,我的示例代码非常错误 :( 更新了它。我从之前的答案中获取了大部分代码,因为它更好并且仍然说明了我的问题。
【问题讨论】:
-
代码正在做你要求它做的事情。您要求 javascript 引擎在
Obj1()中调用method()方法,范围为obj2。如果您只想在Obj1中调用method(),那么您可以在obj1.method处停止,就像您的情况1 一样。这就是javascript 引擎与对象作用域一起工作的方式,所以如果您在一个对象中调用一个方法,作用域为另一个对象那么被调用方法中的this关键字将指向作用域对象。 -
是的,我的问题是,我有一些代码执行“o1.method.call(o2)”,但在那个方法中,我需要引用 o1 来做事。无论如何,我通过阅读 T.J. 的链接解决了我的问题。克劳德(非常感谢:D)
标签: javascript scope closures