有必要每次调用函数都fun.bind(this)()吗?
发布于 8 年前 作者 JerrysShan 6690 次浏览 来自 问答

最近接手了一个项目,发现项目中调用函数全是这种形式 function importData(){ var _self=this; //… fun1.bind(_self)(a);
fun2.bind(_selft)(b); } 感觉这样是可以避免关键字this带来的问题,但是真的需要每次调用都需要这样吗?

15 回复

ES6 Arrow function 你值得拥有

@nihgwu 项目用的node 版本较低4.4,而且领导不希望用es6语法

用 ES6写,然后用 Babel 转到 ES5 之后给他看,恶心死他

@nihgwu 哈哈,恶心死领导!

代码风格问题吧,那些 func 如果每次都 bind 的话,还不如把 this 作为入参的一个

感觉纯粹是个人喜好问题

this 能带来啥问题…… importData 看起来就是个普通方法却有 this 才是真的有问题…… 如果非要这么用,也不需要每次都 bind,要么作为参数传入,要么用 .call 或者 .apply fun1.call(this, a) 就行了

这代码和直接写 this.func1(), this.func2() 并没有两样。问题是写这个代码的人不懂得封装,或者在恐惧和焦灼之中用func1和func2封装了不该封装的东西,更好的方法是封装一个类似 DataImporter 这样的东西 function DataImporter() { return {}; } 然后 new DataImpoter(), 这样内部的this就一致了。

并不喜欢箭头函数的滥用。

ES6 委员会也真是够了。

立即执行的话call,apply值得拥有

(907).toString(32)

代码看着够dry够comfortable就行了,方式不限~

@xadillax 箭头函数就应该写短的东西,或者一个表达式能表达的东西

来自酷炫的 CNodeMD

做个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 也是个办法。

@codehz 正解,所以我强调了“滥用”

回到顶部