最近接手了一个项目,发现项目中调用函数全是这种形式
function importData(){
var _self=this;
//...
fun1.bind(_self)(a);
fun2.bind(_selft)(b);
}
感觉这样是可以避免关键字this带来的问题,但是真的需要每次调用都需要这样吗?
this 能带来啥问题...... importData 看起来就是个普通方法却有 this 才是真的有问题......
如果非要这么用,也不需要每次都 bind,要么作为参数传入,要么用 .call 或者 .apply fun1.call(this, a) 就行了
这代码和直接写 this.func1(), this.func2() 并没有两样。问题是写这个代码的人不懂得封装,或者在恐惧和焦灼之中用func1和func2封装了不该封装的东西,更好的方法是封装一个类似 DataImporter 这样的东西 function DataImporter() { return {}; } 然后 new DataImpoter(), 这样内部的this就一致了。
做个benchmark,测下吧;
function importData(){
var _self=this;
//...
fun1.bind(_self)(a); // fun1.call(_self,a);
fun2.bind(_selft)(b); // fun2.call(_self,b);
}
vs
function importData(){
fun1(this,a);
fun2(this,b);
}
测完之后就知道用哪个了!
一说起OO面向对象, 感觉没有人不知道, 可是却很少见到有人真的能在 js 中用对。 楼主的问题, 搞定不了的话试试用OO风格来解决吧。 另外, 用 Event 也是个办法。