js原型笔记

目录

1. new 的过程

2. __proto__属性

3. prototype属性

4. constructor属性

5. 原型继承

 

new的过程

function Foo() {...};
let f1 = new Foo();

上面代码首先创建一个构造函数Foo(),并用new操作符来生成了一个实例对象f1。

new 会劫持所有普通函数并用构造对象的形式来调用它。

在调用 new 的过程中会发生以下四件事情:

  1. 新生成一个空对象
  2. 链接到原型
  3. 绑定this
  4. 返回新对象

具体实现为:

const isComplexDataType = obj => {
  return (typeof obj === 'object' || typeof obj === 'function') && obj !== null
}

function _new(fn, ...arg) {
  // 首先创建一个空的对象,空对象的__proto__属性指向构造函数的原型对象
  var obj = Object.create(fn.prototype)
  // 把上面创建的空对象赋值构造函数内部的this,用构造函数内部的方法修改空对象
  const result = fn.apply(obj, arg)
  // 如果构造函数返回一个非基本类型的值,则返回这个值,否则返回上面创建的对象
  return isComplexDataType(result) ? res
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值