最近接手了一个项目,发现项目中调用函数全是这种形式
function importData(){
var _self=this;
//…
fun1.bind(_self)(a);
fun2.bind(_selft)(b);
}
感觉这样是可以避免关键字this带来的问题,但是真的需要每次调用都需要这样吗?
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就行了,方式不限~
做个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 正解,所以我强调了“滥用”