js手写版new

js手写版new

new的功能

通过构造函数来创建一个实例对象,并且原型指向这个构造函数

new的过程经历

  1. 创建一个空对象
  2. 改变这个对象的原型指向
  3. 声明一个变量接收改变this指向空对象的函数指向的结果
  4. 返回 声明的变量 或者 对象

手写new

function myNew(Fn, ...args) {
    		//对应步骤一
            let obj = {}
			//对应步骤二
            obj.__proto__ = Fn.prototype
			//通过apply 来执行 
    		//apply是改变this 并执行
            let res = Fn.apply(obj, args)
			//判断构造函数的返回值是否是对象 如果是 就返回对象 否则返回 new里的obj对象
            if (res instanceof Object) {
                return res;
            } else {
                return obj;
            }
   }

function Fun(name){
    this.name = name
}
let list = myNew(Fun,'小陈')

执行结果

请添加图片描述

ok到这里简单的 手写new就实现了 我们来看一下 原版new

在这里插入图片描述

发现是一致的

现在补充解释 new中的一个判断到底是什么意思
在这里插入图片描述

当在new时 没有返回值的函数 默认返回undefined
当返回值是一个 对象类型的话 就把返回值给你 而不是把 new的实例化给你
引用类型都是对象 null也是对象 有句话说的好万物皆对象 大家有空可以调它们的原型 就可以在原型上找到了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值