一、call、apply和bind的区别:
相同点:改变this的指向
1、call和apply
作用(相同点):1、改变this指向。2、调用函数本身;3、第一个参数都是对象(this的指向)
不同点:
1)、apply只有两个参数,第二个参数是数组(可以接收父函数的arguments)
2)、call第二个参数朝后的所有参数是原函数的参数(把apply第二个参数展开)
2、bind:
作用:1、改变this指向(把函数和对象绑死),2、产生新的函数,新的函数里的this就是绑定对象。
call和apply:
var fn01 = function(){
console.log("fn01的this",this); --this指向window
}
fn01();
let obj1 = {
id:"01001"
}
fn01.call(obj1);//调用fn01的同时,让fn01内部的this是obj1
let obj2 = {
id:"01002"
}
fn01.call(obj2);//调用fn01的同时,让fn01内部的this是obj2
(function(){
console.log("匿名调用call时的this",this);--this指向的是obj1
}).call(obj1);
bind:
var fn02 = function(){
console.log("fn02里的this",this);--this指向的是obj3
}
let obj3 = {
id:"01003"
}
let obj4 = {
id:"01004"
}
let newFn02 = fn02.bind(obj3);
newFn02();
let newFn03 = fn02.bind(obj4);
newFn03();
newFn03();
let obj5 = {
id:"01005"
}
let newFn05 = (function(){
console.log("匿名函数使用bind里的this",this);--this指向的是obj5
}).bind(obj5);
newFn05();
二、state和props的异同
相同:
1、都是组件的数据2、发生改变时,都会引起组件的更新。
不同:
1、state: 是组件的内部状态(数据),可以被修改,但是必须用setState修改,而且是异步的
2、props:是组件的属性,是从外部传入组件的数据,不能被修改。