JS-bind、call、apply

163 阅读1分钟

概述

bind call apply都是改变this指向的

bind

bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数。

var a = {name:'test'}
function test(){
	console.log('test',this);
}
function test1(){
	console.log('test',this,arguments);
}
test.bind(a,{user:'testUser'})();
test1.bind(a,{user:'testUser'})();
// test { name: 'test' }
// test1 { name: 'test' } [Arguments] { '0': { user: 'testUser' } }

call

立即调用,其内的this指向它传入call的第一个参数,而传入bind的第二个及其以后的参数都是数组里面的元素。

var b = {name:'test'}
function test(){
	console.log('test',this)
}
function test1(){
	console.log('test1',this,arguments)
}
test.call(b);
test1.call(b,{user:'testUser'});
// test { name: 'test' }
// test1 { name: 'test' } [Arguments] { '0': { user: 'testUser' } }

apply

立即调用,其内的this指向它传入apply的第一个参数,而传入apply的第二个参数是参数数组。

var c = {name:'test'}
function test(){
	console.log('test',this)
}
function test1(){
	console.log('test1',this,arguments)
}
test.apply(c);
test1.apply(c,[{user:'testUser'}]);
// test { name: 'test' }
// test1 { name: 'test' } [Arguments] { '0': { user: 'testUser' } }

参见

1.CSDN-Chengbo_X