new、apply、call、bind几种方法的实现
基本思想:通过 new 创建新对象,最终返回一个对象,该对象具有构造函数的实例属性,该对象的原型 __proto__ 指向构造函数的原型对象
实现步骤:
- 创建一个新对象
obj obj.__proto__ = Constructor.prototypeConstructor.apply(obj):让构造函数的this指向新创建的对象obj- 返回对象:如果构造函数有返回值,需要判断返回值的类型
- 如果返回值是一个对象,则返回这个对象
- 如果返回值不是一个对象,则返回新创建的对象
基本思想:给指定对象新增一个属性,将要执行的函数赋值给对象属性,执行对象属性对应的函数
实现步骤:
- 将当前运行的函数赋值给指定对象的属性:
obj.func = this(用this保存当前运行的函数) - 运行
obj.func(args) - 删除对象属性
delete obj.func
基本思想:返回一个函数,将调用函数和指定的对象进行绑定
实现步骤:
- 保存调用
bind()的函数func - 保存传入
bind()的剩余参数(这些参数要传入最终执行的函数中) - 返回一个函数
bindFunc,函数通过执行func.apply(obj)实现作用域绑定 - 设置返回函数的原型(通过设置一个中转函数,中转函数的原型等于调用函数的原型,返回函数的原型等于中转函数的原型)