call,apply和bind区别

这三个函数的作用都是将函数绑定到上下文中,用来改变函数中this的指向;三者的不同点在于语法的不同

fun.call(thisArg[, arg1[, arg2[, ...]]])

fun.apply(thisArg, [argsArray])

所以apply和call的区别是call方法接受的是若干个参数列表,而apply接受的是一个包含多个参数的数组

而bind的()方法创建一个新的函数,当被调用时,将其this关键字设置为提供的值,在调用新的函数是,在任何提供之前提供一个给定的参数序列。

var bindFn = fun.bind(thisArg[, arg1[, arg2[, ...]]])

bindFn()

例子:

var name = 'window';

var sayName = function (param) {

    console.log('my name is:' + this.name + ',my param is ' + param)

};

//my name is:window,my param is window param

sayName('window param')

var callObj = {

    name: 'call'

};

//my name is:call,my param is call param

sayName.call(callObj, 'call param');

var applyObj = {

    name: 'apply'

};

//my name is:apply,my param is apply param

sayName.apply(applyObj, ['apply param']);

var bindObj = {

    name: 'bind'

}

var bindFn = sayName.bind(bindObj, 'bind param')

//my name is:bind,my param is bind param

bindFn()


开心最重要,不要理会生活中的妖魔鬼怪。

你可能感兴趣的:(call,apply和bind区别)