起因
在项目开发中,经常使用apply
,call
以及bind
来改变js
的this
指针的指向,但是使用的时候只知道其用处,并不知道其原理,这样对于使我们编程时对js
的理解并不够深入,今天我们来手写几个js
常用的方法,有助我们深入理解js
编程。
apply
apply
方法接收两个参数,第一个是this
指针指向的对象,第二个是被调用函数的参数,参数是以数组
的形式入参。方法的作用主要是改变this
指针的指向。
1 | Function.prototype.apply2 = function() { |
call
call
方法与apply
方法的作用是一样的,不同的地方是call
方法接收的不是数组,而是正常的参数。
1 | Function.prototype.call2 = function() { |
bind
bind
稍微复杂一点,bind
方法与call
和apply
不一样,bind
方法是返回的是被绑定this指向的函数,而不是直接执行函数,入参与call
方法一样。有点需要注意的是当绑定的函数使用new
关键字调用时,此时的this
指向自身,而不是绑定的对象。
1 | Function.prototype.bind2 = function() { |
new
new
关键字的用作是实例化一个对象。主要内部的步骤如下:
- 创建一个空的对象
- 改变空对象的指向
- 执行函数,如果函数有返回值就返回返回值,没有则返回创建的对象
1
2
3
4
5
6
7
8function new2(func) {
const obj = Object.create(func.prototype);
const res = func.call(obj);
if (res) {
return res;
}
return obj;
}
instanceof
instanceof
的作用主要是检查一个对象是否属于某个类,原理是判断对象的原型属性是否等于类的原型属性,不等就一直沿着对象的原型链然后一直往下找。
1 | function instanceof2(obj, Func) { |
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章