了解一下new的过程发生了什么
之前看过相关文章,结果时间一久又忘了,果然还是得撸一篇文章才行
一、了解new
先看一下mdn对 new 的介绍: new 运算符
new会进行以下操作:
- 创建一个空的简单JavaScript对象(即{}),称之为A;
- 链接该对象A的构造函数(设置对象A的constructor)到另一个对象(即你要new的那个构造函数) ;
- 将步骤1新创建的对象A作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
二、模拟一个new的过程
废话不多说,直接上代码:
function _new(constructor,...arg){const obj = {}obj.__proto__ = constructor.prototypeconst res = constructor.apply(obj,arg)return res instanceof Object ? res : obj
}function User(name){this.name = name
}function User1(name){this.name = namereturn {}
}console.log(_new(User, 'henry')); //{ name: 'henry' }
console.log(new User('henry')); //{ name: 'henry' }
console.log(_new(User1, 'henry'));//{}
console.log(new User1('henry')); //{}
注意箭头函数不能当构造函数,不能被new,具体的可以参考 MDN
下一篇介绍一下 继承,继承的实现过程及ES5和ES6实现的区别
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
