2015-03-13 46 views
0

比方说,我有一个函数:使用Function.bind可以保存默认值吗?如果不是,为什么?

function onSomethingChanged(field, evt) { 
    this.validate(field, evt.target.value); 
} 

而且我有一个阵营组成部分,我做的事:

<input onChanged={this.onSomethingChanged.bind(null, "username")} /> 
  1. 请问我this是保守的,如果我通过null为thisArg?
  2. 如果不是,我怎么能保存它,而不明确使用this(不写this.onSomethingChanged.bind(this, "username"))。
  3. 如果不是(再次),为什么JavaScript会阻止呢?有没有解决方法?

谢谢!

+0

添加react标签也许? – 2015-03-13 17:34:49

+0

@torazaburo完成,谢谢! – Raito 2015-03-13 17:35:33

+0

如果你的意思是js库React,那么它应该被标记为ReactJS,你使用的标签是用于同名的php库。 – 2015-03-13 17:49:39

回答

1

没有,上下文(this)将在strict modenull和全局对象(window)在non-strict模式

如果你不喜欢bind方法,您可以使用ES6 arrow functions来处理这个:

<input onChanged={()=>this.onSomethingChanged("username")} /> 

,或者如果你不喜欢括号:

<input onChanged={$=>this.onSomethingChanged("username")} /> 

其中$是事件对象(可以用e或任何其他字符代替)。

+0

这可能是一个好方法!我喜欢!我会等待其他答案,如果没有,我会接受你的! – Raito 2015-03-13 22:14:45

0

不是。这是通过任何函数的第一个参数。通过传入null,你说这是空的。

取而代之。功能

<input onChanged={this.onSomethingChanged.bind(this, "username")} /> 
+0

如果我需要为此编写大量的绑定,是否没有快捷方式? – Raito 2015-03-13 18:01:42

+0

呃他们是其他方式来做到这一点。一个是不要使用这个。相反,看看关闭。更容易写/理解国际海事组织。你所做的所有绑定都是用这个创建一个咖喱,用“username”作为默认参数,你可以用闭包来完成。并避免使用关键字this,并且不需要绑定。 – user2734679 2015-03-13 18:10:59

+0

但是,使用闭包(你的意思是在onChanged?)的问题是,它会污染我的渲染方法,并使其不可读。否则,如果您想到另一种方式,您可以在答案中提供一个例子吗? – Raito 2015-03-13 18:15:18

相关问题