封装_new函数

自己实现一个_new方法,模拟出内置new后的结果

自己实现一个_new方法,模拟出内置new后的结果

一、JavaScript中new一个对象的过程:
  1. 创建一个新对象;
  2. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象;
  3. 执行构造函数,并把函数中的this指向新对象;
  4. 返回新对象。
二、封装_new函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function _new(fn, ...arg){//fn为当前要new的构造函数,...arg为需要给构造函数传递的参数
    let obj = {}
    obj.__proto__ = fn.prototype//让新对象的原型链指向构造函数的原型
    fn.call(obj, ...arg)//执行构造函数,并把...arg里面的参数传入,同时改变this指向新对象
    return obj
}

// 利用Dog构造函数测试
function Dog(name){
    this.name = name
}
Dog.prototype.bark = function(){
    console.log(this.name)
}
Dog.prototype.sayName = function(){
    console.log('I am' +' '+ this.name)
}
let test = _new(Dog, 'wangcai')


-->