var ary=[12,24,85];
ary.slice; //实例通过原型链的查找机制找到Arrary.prototype上的slice方法
ary.slice();//让找到的slice方法执行在执行时候把ary数组进行截取;
相同点:都是改变 this的指向
call, apply,bind 的函数
1,fn.call(obj,100,200);第一个参数是给函数执行时候,给this赋值,后面才是传的参数,在执行call方法时候,让fn方法中的this变为第一个参数值obj;然后再把fn这个函数执行
在不严格情况下:当传递的this 为null或undefined时候,this为window
严格情况下:当传递的this 为null或undefined时候,this为null或undefined
2,apply(obj, [100,200]);第一个参数是改变this的指向,后面参数是放在一个数组中传参
3,bind(obj,参数1,参数2)():bind 绑定 this ,后面是传的参数,如果后面不加()
,则返回的是一个函数,加上()
则返回一个函数运行的结果
plus.bind(obj, 3, 4); // 返回一个函数,bind 的时候不会立即执行
plus.bind(obj, 3, 4)(); // 8 ,返回运行的结果
区别:
1,call方法,第一个是改变this的指向,后面传的参数是一个一个传的
2,apply方法:第一个是改变this的指向,后面传参是一个数组整个传过去
3,bind方法:第一个是改变this的指向,后面传的参数是一个一个传的,但是如果后面不加()
,则返回函数,加()
则返回函数运行的结果
function fn(a,b){
return a+b;
}
fn.call(obj,100,200);300 //传参是一个个传的
fn.apply(obj,[100,200]); 300 //传参是放在一个数组中传参
fn.bind(obj,100,200);fn () // 这里返回的是一个函数
fn.bind(obj,100,200)();// 300
网友评论