0
点赞
收藏
分享

微信扫一扫

js new操作符具体做了什么

冬冬_79d4 2022-01-28 阅读 70
原型模式

我估计很多人都会说:new操作符具体做了

  1. 创建一个对象
  2. 原型赋值
  3. 改变this指向
  4. 返回对象

其实是不全的,不全就在最后一步。

下面我们就一一论证:

function Fun(){
	console.log( 1 );
	return 111;
}
let o1 = new Fun();

以上代码返回结果是什么?1. 运行函数体代码 2. 返回一个对象
那么如果这样写呢?

function Fun(){
	console.log( 1 );
	return [1,2,3];
}
let o2 = new Fun();

运行以上代码发现了,居然是1. 运行函数体代码 2. 返回了return的数组。
所以new操作符的最后一步其实要判断的,大致封装代码如下:

function Fun(Con, ...args){
  // 1. 创建一个空的对象
  let  obj = Object.create(null);
  // 2. 将空对象指向构造函数的原型链
  Object.setPrototypeOf(obj, Con.prototype);
  // 3. obj绑定到构造函数上,便可以访问构造函数中的属性,即obj.Con(args)
  let result = Con.apply(obj, args);
  // 4.1 如果返回的result是一个对象则返回
  // 4.2 new方法失效,否则返回obj
  return result instanceof Object ? result : obj;
}

了解更多,请来小鹿线:https://xuexiluxian.cn/

举报

相关推荐

0 条评论