手写new

我的最新博客地址:我的最新博客

想要实现new操作符,首先得知道new操作符干了哪些事情:
第一、new操作符会创建一个对象并返回,且此对象的__proto__等于此函数的原型prototype(这里需要注意__proto__prototype的区别和联系,原型prototype是函数才有的,务必记住,而__proto__可以理解为对象的某个属性,此属性指向对象的构造函数的prototype,是不是很绕。举个例子);
比如,new函数A创建了对象a,则a.__proto__ = A.prototype,代码如下:

function A(age) {
    
    
	this.age = age
}

const a = new A(18)
console.log(a.__proto__ === A.prototype)
// true

第二、函数体中的this指向new操作符所创建的对象;
第三、如果此函数的返回值为对象,则函数的返回值则为函数体中所写的返回值,否则new操作符则创建一个对象并返回;
弄清楚了这三件事,下面就可以入手开始实现自己的new了:

  function myNew(fn, ...args) {
    
    
    const obj = Object.create(fn.prototype)
    const res = fn.apply(obj, args)
    return typeof res === 'object' ? res : obj
  }

有更好的写法,欢迎指出。

猜你喜欢

转载自blog.csdn.net/weixin_40920953/article/details/120363809
new