call、apply、bind(2-2)

call、apply、bind

小知识点

  • [ ] 数字+undefined=NaN;
  • [ ] 预处理:先把一个结果准备好,用的时候再执行

call、apply、bind

  • [x] call、apply、bind的第一个参数一定是this指向,作用都一样;
  • [x] call & apply唯一的区别apply以数组的形式传递参数。
  • [x] call、apply&bind的区别:
    • call、apply:改变this,函数立即执行
    • bind:改变this,只是预处理,返回结果,但函数fn不立即执行
  • [x] bind : IE6~8不兼容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var obj={name:"珠峰培训"};
function fn(num1,num2){
console.log(num1+num2);
console.log(this);
}
//非严格模式下:this-->(转化为)对象;【()(null)(undefined)-->window】
//严格模式下:this-->数据类型值(是啥就是啥)
fn.call();//NaN this-->window 严格模式:this-->undefined
fn.call(null);//NaN this-->window 严格模式:this-->null
fn.call(undefined);//NaN this-->window 严格模式:this-->undefined
fn.call(100,200);//100+undefined=NaN this->100
fn.call(obj,100,200);//100+200=300 this-->obj
//call、apply唯一的区别apply以数组的形式传递。
fn.apply(obj,[100,200]);
//预处理:先把fn的this改变结果,并准备好对应的参数,用的时候再直接执行
var a=fn.bind(1,2);//不立即处理,bind只是改变this并返回一个值,但不执行fn,
// fn(1,2);
console.log(a());

call深入(待续)

fn.call(obj);
call作用:fn中的this–>obj

1
2

模拟call

1
2
3
Function.prototype.myCall=function(context){
1、让fn中的this
}