apply,call,bind的区别和功能
功能:
1、apply、call、bind的功能都是改变this指向
区别:
1、apply函数的第二个参数是调用函数的参数以数组形式展现
2、call函数的第二个及以后的参数,依次传入调用函数的参数
3、bind的第二个及以后的参数,依次传入调用函数的参数,同时bind函数调用完后只是绑定this并没有将函数进行调用,需要用其返回值进行调用
案例一:apply
var name = "张三"; const obj = { name: '李四' } function sayName() { console.log(this.name); // 李四 console.log(arguments); // [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ] } var currentName = sayName.apply(obj, [1,2,3,4]); //直接調用
案例二:call
var name = "张三"; const obj = { name: '李四' } function sayName() { console.log(this.name); // 李四 console.log(arguments); // [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ] } var currentName = sayName.call(obj, 1,2,3,4); //直接調用
案例三:bind
var name = "张三"; const obj = { name: '李四' } function sayName() { console.log(this.name); // 李四 console.log(arguments); // [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ] } var currentName = sayName.bind(obj, 1,2,3,4); console.log(currentName); // ƒ sayName() { // console.log(this.name); // console.log(arguments); // } currentName();