function Person(name){
    this.name = name
}
Person.prototype.say=function(){
    console.log('我的名字'+this.name)
}
const person1 = new Person('xiaoming')
person1.say()

模拟new 实现(手动实现New过程)

function myNew(Fn,...args){
    //1.创建一个空对象
	const obj = {}
    //2.将新对象的__proto__属性设置为Fn.prototype构造函数的原型
	obj.__proto__ = Fn.prototype
    //3. 修改this指向为新对象
	const res = Fn.apply(obj,args)
    //4.将函数得结果返回
	return typeeof res ==='object'?res:{}
}
const person1 = myNew(Person,'xiaoming')
person1.say()

总结:

new 过程都发生了什么?

  1. 创建一个空对象
  2. 将新对象的__proto__属性设置为Fn.prototype构造函数的原型
  3. 修改this指向为新对象
  4. 将函数得结果返回
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐