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] )

原文地址:https://www.cnblogs.com/LLLLily/p/7481316.html