实现 javaScript 中 new 操作符

new运算符定义是:
创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

1. 以下面代码为例:

function Car(name, model) {
  this.name = name;
  this.model = model;
}

const car1 = new Car('XXX', 'Talon TSi');

2. 描述

new 关键字会进行如下的操作:
	1. 创建一个空对象 (即 o = {} )
	2. 空对象原型上绑定构造函数的原型(即 o._proto = Car.prototype)
		目的是为了继承 Car 原型上的内容 (在下面**图二**有代码演示)
	3. 调用 Car() 函数,并把空对象 o 当做 this ( 即 Car.call(o) )
	4. 如果该函数 return 引用类型 则返回此变量,如果 return 的是基本类型则返回 this
	
	// 基本类型: 字符串、数字、布尔、空(null)、未定义(undefined)、Symbol。
	// 引用类型: 对象(object)、数组(Array)、函数 (Function) 。

3. 结合 new运算符定义 如图1:
在这里插入图片描述
3.2 图二:
在这里插入图片描述
4. 实现new操作符

function Car(name, model) {
  this.name = name;
  this.model = model;
}
Car.prototype.move = function () {
    console.log('小车出发啦!!!')
}

// const car1TomyNew = myNew(Car,'奔驰', 'Talon TSi' )
// 目的 car1TomyNew 得到的是=> {name: "奔驰", model: "Talon TSi"} 其中原型上也要有 move方法
// 创建car1TomyNew 方法 , ...args 为 ES6 剩余参数语法
function car1TomyNew (func, ...args) {
	// 1. 第一步创建一个对象 
	let obj = {}
	// 2. 继承函数的原型
	o._proto_ = func.prototype
	// 3. 调用函数并改变this的指向
	/*
	* 这里就要多记录几句:
	* 改变this指向有
	*/
	let result = func.call(o)
	result instancof Object ? return  
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值