如何在 obj 的处理程序函数中获取变量?没有引用 MyClass 中的 obj 。
var obj = {
func: function(){
var myClass = new MyClass();
myClass.handler = this.handler;
myClass.play();
},
handler: function(){
//Here i don't have access to obj
console.log(this); //MyClass
console.log(this.variable); //undefined
},
variable:true
};
function MyClass(){
this.play = function(){
this.handler();
};
this.handler = function(){};
};
obj.func();
如果您使用Base.js或其他类似的oop方式,那么构建需要您。
_.bindAll(obj)(下划线metod)也不合适。它在Base.js中突破了。
答案 0 :(得分:2)
使用变量来引用原始上下文:
...
var self = this;
myClass.handler = function(){ self.handler(); };
...
答案 1 :(得分:2)
仅绑定处理程序方法:http://jsfiddle.net/uZN3e/1/
var obj = {
variable:true,
func: function(){
var myClass = new MyClass();
// notice Function.bind call here
// you can use _.bind instead to make it compatible with legacy browsers
myClass.handler = this.handler.bind(this);
myClass.play();
},
handler: function(){
console.log(this.variable);
}
};
function MyClass(){
this.play = function(){
this.handler();
};
this.handler = function(){};
};
obj.func();
答案 2 :(得分:0)
在variable
之前声明handler
:
var obj = {
variable: true,
func: function(){
// ...
},
handler: function(){
console.log(this.variable); //true
}
};
答案 3 :(得分:0)
在范围var中声明的obj中使用函数调用来解决它。
var obj = {
func: function(){
var self = this;
var myClass = new MyClass();
myClass.handler = function() { return this.handler.call(self); };
myClass.play();
},
handler: function(){
//Here i don't have access to obj
console.log(this); //MyClass
console.log(this.variable); //undefined
},
variable:true
};
答案 4 :(得分:0)
您无法访问 obj ,因为此绑定到MyClass构造函数的实例 - myClass。如果在处理程序中您希望通过此访问 myClass 并访问 obj ,则必须使用 obj 直接命名:
console.log(this); // myClass
console.log(obj.variable); // true
如果你想这个绑定到 obj ,请使用Juan Mellado或gryzzly建议的内容。