正题
call 改变this的指向,传递参数为参数列表。
let arrary = [1,2,4,5,7];
let obj = {
name:'test',
};
function fn(){
console.log(this,arguments);//this 为obj对象,arguments 为传入参数数组
}
fn.call(obj,1,2,3,4,5,6);
apply 改变this指向,传递参数为数组。
let arrary = [1,2,4,5,7];
let obj = {
name:'test',
};
function fn(){
console.log(this,arguments);//this 为obj对象,arguments 为传入参数数组
}
fn.apply(obj,arr);
bind 改变永久更改this指向(这个没弄太明白,明白的老哥指教下。),传递参数为参数列表,bind 可以分次输入参数,这个在《JavaScript高级程序语言设计(第三版)》里叫函数柯里化,简单说就是尽量减少函数传递的参数。
let arrary = [1,2,4,5,7];
let obj = {
name:'test',
};
function fn(){
console.log(this,arguments);//this 为obj对象,arguments 为传入参数数组
}
let fnBind = fn.bind(obj,arr);//不会立即执行需要调用fnBind变量
fnBind();
链式调用 怎么实现类似与vue3 app.use(传入点什么).use(传入点什么) 这样一直调用。
let obj = {
name:'test',
say:function(num){
console.log(num);
return obj;//为什么不返回this?因为this 有些情况会指向全局
},
};
obj.say(1).say(2).say(3).say(4);
let test = obj.say;
test(1)//say function 里返回的this指向全局,此时就无法在实现.say().say()这样的调用
test.call(obj)//但是可以通过改变this指向来实现
不足之处望指出。