简介
在上面我们已经了解了多种绑定方式,默认绑定、隐式绑定、显示绑定、new 绑定、Object.create 绑定、箭头函数。
我们本篇文章通过实现多种显示绑定的方法,来加深对this
的指向理解和应对开发时不同的场景使用不同的绑定方法。其实还有一部分原因就是在面试的时候,一般来说一面都会笔试或者电话面试都会遇到,让你手写一个call/apply/bind/new/Object.create
等等。后面的文章会越来越深入的去理解JavaScript
这门语言,等再后面的框架,架构能让我们更好的晋升。
我们首先要实现一个call/apply
,因为无论是后面的bind
还是new/Object.create
都会用到call/apply
。
文章大致章节:
call/apply
:call/apply
的使用场景,它们两个运行速度,谁更快一点,自己实现call/apply
bind
:bind
的使用场景,实现一个bind
new/Object.create
:new/Object.create
使用场景,分别实现他们
call/apply
call()/apply()
方法使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
注意:该方法的语法和作用与
apply()
方法类似,只有一个区别,就是call()
方法接受的是一个参数列表,而apply()
方法接受的是一个包含多个参数的数组。
call/apply
是怎么使用,简单使用如下:
1 | var testFunc = function (name, age) { |
new 和 Object.create
new 运算符
创建一个用户定义的对象类型的实例
或具有构造函数的内置对象的实例
。会在new
的内部改变新生成的对象实例
的this
,我们可以通过下面的样例看一下:
1 | function Car(make, model, year) { |
我们可以看到在通过new
关键字生成的新的对象,它复刻了Car
中声明了的多个变量,并且这些变量在Car
中都是绑定在Car
中的this
上。而新生成的实例对象同时也拥有所有的属性。我们可以知道new
运行的时候会新创建一个对象,这个对象包含所有Car
中的this
上的对象。