JavaScript中new操作符和Object.create()的原理

本文详细解析了JavaScript中new操作符的工作原理,包括创建空对象、设置原型、执行构造函数及返回对象的过程。同时,提供了模仿new操作符的实现代码,帮助理解其内部机制。

new

new func()主要过程如下:

  1. 创建一个空对象obj
  2. 将该空对象的原型设置为构造函数的原型,即obj.__proto__ = func.prototype
  3. 以该对象为上下文执行构造函数,即func.call(obj)
  4. 返回该对象,即return obj

对于第3、4步还有个小细节,如果第3步func有返回值且返回值为对象,则第4步会返回func的返回值,反之则默认返回obj

模仿new原理的代码如下:

function new2(func) { // func为某个构造函数
  var createObject = Object.create(func.prototype); // 以构造函数的原型对象为原型,创建一个空对象,即创建一个{ __proto__: func.prototype }
  var returnObject = func.call(createObject); // 使用刚创建的空对象作为上下文(this)执行构造函数
  if (typeof returnObject === 'object') { // 若构造函数有返回对象,则返回该对象
    return returnObject;
  } else { // 若构造函数未返回对象,则返回Object.create创建的对象
    return createObject;
  }
};

Object.create()

在模仿new原理的代码中用到了Object.create(),它的作用是以入参为原型创建一个空对象,即

Object.create = function (obj) {
  return { '__proto__': obj};
};

Object.create = function (obj) {
  function F() {}
  F.prototype = obj;
  return new F();
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值