new操作符都做了哪些事情
一、概念
- new 能创建一个实例对象;
- 这个对象是给定的构造函数
function Person(name, age){
this.name = name;
this.age = age;
console.log(this) // Person { name: 'Tom', age: 20 }
}
Person.prototype.sayName = function () {
console.log(this.name)
}
const person1 = new Person('Tom', 20)
console.log(person1) // Person {name: "Tom", age: 20}
person1.sayName() // 'Tom'
- new 通过构造函数 Person 创建出来的实例可以访问到构造函数中的属性
- new 通过构造函数 Person 创建出来的实例可以访问到构造函数原型链中的属性(即sayName)
- 构造函数 Person 的 this 指向是 new 通过构造函数 Person 创建出来的实例
二、
【实例化对象、继承原型、this指向创建的对象、返回创建的对象】
-
创建新的空对象
-
设置原型,将对象的原型设置为函数的prototype对象【将对象的proto指向构造函数Func的原型对象prototype】=》建立对象的原型链
-
让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)
-
判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型
function newFunc(Func,...args) {
// 1.创建一个新对象
let newObj = {}
// 2.将新对象和构造函数通过原型链连接
newObj.__proto__ = Func.prototype
// 3.将构造函数的this绑定到新对象上
const result = Func.apply(newObj,args)
// 4.根据返回值类型判断,如果是值类型返回newObj,如果是引用类型返回正常引用类型
return result instanceof Object ? result : newObj
}
测试:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function(){
console.log(this.name);
}
const person1 = newFunc(Person,'Tom','18')
console.log(person1) // Person { name: 'Tom', age: '18' }
person1.sayName() // Tom
person1.getFullName() // TypeError: person1.getFullName is not a function
给构造函数添加属性需要通过原型链=====》person1.getFullName():报错
参考地址:(4条消息) new操作符具体干了什么_new操作符具体干了什么呢_蔡姐的博客-CSDN博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?