new、call、apply、bind内部进行了什么操作?

new、call、apply、bind内部进行了什么操作?
Tomnew
思路:
- 创建一个对象
__proto__指向这个类的原型对象(可以使用prototype上的方法了) - 调用类
执行并且修改this指向为新创建的obj,并且传入剩余参数 - 判断如果构造函数
返回的是引用类型则返回这个值,否则返回obj
1 | function Animal(type) { |
call
思路:
- 先找到call方法 => 只有
函数才能找到call方法 => 找到call - 并且把调用call这个函数中的
this修改成call的第一个参数=> 改this - 调用
call方法的那个函数执行=> 这个函数中的this已经被修改过了
1 | function fn1(){ |
apply
思路:和call一样,只不过第二个参数是数组
1 | Function.prototype.apply = function (context,args){ |
bind
思路:
- bind方法可以绑定this指向 绑定参数
- bind方法返回一个绑定后的函数
(高阶函数) - 如果绑定的函数
被new了 当前函数的this就是当前的实例 new 出来的结果可以找到原有类的原型
1 | let obj = { |








