Boy*_*oyo 5 javascript oop closures
我怎样才能在obj的处理函数中得到变量?如果没有参考OBJ在MyClass的.
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();
Run Code Online (Sandbox Code Playgroud)
如果您使用Base.js或其他类似的oop方式,那么构建需要您.
_.bindAll(obj)(下划线metod)也不合适.它在Base.js中突破了.
仅绑定处理程序方法:http://jsfiddle.net/uZN3e/1/
\n\nvar obj = {\n variable:true,\n\n func: function(){\n var myClass = new MyClass();\n // notice Function.bind call here\n // you can use _.bind instead to make it compatible with legacy browsers\n myClass.handler = this.handler.bind(this);\n myClass.play(); \n },\n\n handler: function(){\n console.log(this.variable);\n }\n};\n\nfunction MyClass(){\n this.play = function(){\n this.handler();\n };\n\n this.handler = function(){};\n};\n\nobj.func();\n\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n