call,apply和bind的区别
call,apply继承并调用该函数,bind继承后未调用函数。
var React = require('react'); //核心 var ReactDom = require('react-dom'); //描画dom var Nav=React.createClass({ render: function(){ return <div>Nav</div> } }); var Header=React.createClass({ getInitialState: function(){//组件初始状态 return { // 数据名:值 str:'bmw', } }, show: function(a,ev){ // alert(a);//参数 // console.log(this); console.log(ev);//代理事件对象 // ev.target.style.background='red'; }, render: function(){ /*var show=function(){ alert('ok'); };*/ return <div> <input type="button" value="按钮" onClick={this.show.bind(this,12)}/> //此处只能用bind,如果用的是call或apply,打开页面后尚未点击时函数show()就已经执行了(被调用)。 </div> } }); //组件属性 , 值是string||表达式 ReactDom.render( <Header></Header>, document.querySelector('#app') );
另,call和apply的区别在于:call必须明确地传入每一个参数,apply传入参数数组。(详见《高级程序设计》p116)
即,call ( 在其中运行函数的作用域,每一个参数 ) → call ( this,pra1,pra2,pra3 )
apply ( 在其中运行函数的作用域,参数数组) → call ( this,[pra1,pra2,pra3] )
怕什么真理无穷,进一寸有一寸的欢喜。