javascript——apply call bind

  • 2019-03-06
  • 0
  • 2

call

这里看下MDN的定义就好了
call
call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。

函数调用
js(es5)里面有三种函数调用方式

func(p1, p2) 
obj.child.method(p1, p2)
func.call(context, p1, p2)

其实正常的调用方式是第三种,前两种其实都是语法糖,这样我们就好理解this为何会改变指向this


通俗点call 方法第一个参数是要绑定给this的值

注意
该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。

具体请看MDN

功能
那么call和apply能帮助我们实现什么呢
1.基本的改变函数调用额this指向,

例子

var message = 'you name is '
var obj = {
    message: 'My name is: '
}

function getName(firstName, lastName) {
    console.log(this.message + firstName + ' ' + lastName)
}

getName('y', 'tu') // "you name is y tu"
getName.call(obj, 'Dot', 'Dolby') // "My name is: Dot Dolby"

getName第一次执行的this在没有指定的情况下,浏览器会默认只想window,
getName第二次执行call会让this指向obj,所以执行的时候this.message就是Objmessage

顺变说下bind,bind和 call的区别就是bind 方法不会立即执行,而是返回一个改变了上下文 this 后的函数,不会改变原函数

我们了解了功能后,想下怎么实现吧

评论

  • ytu回复

    ,,,