call、apply、bind的区别
2020-05-18 本文已影响0人
疯狂的蜗牛Dianna
call和apply的功能一样
方法调用 + 改变this的指向
// call :函数.call(this的指向,参数列表)
// apply:函数.apply(this的指向,参数数组)
call的用法以及使用场景
// call : 方法调用 和 改变this指向
// 结构函数.call();
function test(){
console.log(this);
console.log(arguments);
};
// test();
// test.call();
// 2.有参数的
// 结构 : 函数.call(参数1,参数2,,,,)
// 参数1 this的指向
// 参数2,参数3作为实参来传递
var obj = {
name: '陈银娟'
};
test.call(obj,111,222);
// 场景1 继承
function Person(){
this.name = 'cc',
this.age = '20',
this.liaomei = function(){
console.log('扶我起来试试');
}
}
var obj = {};
Person.call(obj);
console.log(obj.name);
console.log(obj.age);
obj.liaomei();
// 场景2 方法借用
var cc = {
name: '小陈陈',
age: 90,
liaomei: function(){
console.log( this.name + '撩妹');
}
}
// cc.liaomei();
var ff = {
name: '肥肥'
};
// 方法借用
// 函数.call(this的指向,实参1,实参2);
cc.liaomei.call(ff);
ff.liaomei();
bind只改变this的指向 没有方法调用
// bind
// 结构:函数.bind(this的指向,实参1,,,);
// 作用 : 改变this的指向 但是不会方法调用的功能
// 返回一个新的函数
function test(){
console.log(this);
}
// test();
var ff = {
name: 'ff'
};
// 结果为空
var f = test.bind(ff);
f();
var f = test.bind(ff);
f();// this=> ff
var obj = {
f: f
};
// 还是指向的是ff bind的指向一旦改变了 就永远指向ff了
obj.f();