前端 js中new()到底做了什么

1. 原理讲解

function Person(name,age){
  this.name = name
  this.age = age
}
Persion.prototype.sayName = function (){
  console.log(this.name)
}
const person1 = new Person('Tom',20)
console.log(person1) //Persion {name: 'Tom',age:20}
person1.sayName() // 'Tom'

我们可以看到:new创建处理出来的实例,可以访问到构造函数中的属性,也可以访问到构造函数原型链中的属性

我们在构造函数中返回一个对象。

function Person(name,age){
  this.name = name
  this.age = age
  return { age: 26 }
}
Persion.prototype.sayName = function (){
  console.log(this.name)
}
const person1 = new Person('Tom',20)
console.log(person1) // Persion { age:26 }
console.log(person1.name) // undefined

从上面可以发现,构造函数如果返回值为一个对象,那么这个返回值会被正常使用。

所以我们可以看出,new操作符 的流程为:

  1. 创建一个空对象,这个新对象将成为函数的实例
  2. 将新对象的原型链接到构造函数的原型对象,这样新对象就可以访问构造函数原型对象中定义的属性和方法
  3. 将构造函数的作用域赋给新对象,这样新对象就可以通过this关键字来引用构造函数中的属性和方法
  4. 执行构造函数中的代码,构造函数中的代码将用于初始化新对象的属性和方法

2. 手写new操作符

function myNew(Func,...args){
  //1.创建一个新对象
  const obj = {}
  //2.新对象原型指向构造函数原型对象
  obj._proto_ = Func.prototype
  //3.将构造函数的this指向新对象
  let result = Func.apply(obj,args)
  //4.根据返回值判断
  return result instanceof Object ? result : obj
}

全部评论

相关推荐

头像
10-13 16:39
湖南大学 安卓
18岁是刚好进入大学的年纪,青涩懵懂,对爱情,对未来充满了无限遐想。18岁的恋爱像是夏天,热烈,勇敢,纯粹,是一场不计得失的盛夏烟火。我很确定,18-22岁的年纪,我经历过,享受过爱情……她在篮球场上给我送过水,我教她打篮球,冬天她给我织过围巾,会在寝室做好烙饼,炸酱面,端着热气腾腾饭盒的从她的宿舍跑到我的宿舍,夏天,她会在寝室熬银耳羹,绿豆粥,一熬就是三四个小时。她很黏我,我忙的时候会给我发消息,我闲的时候就来找我散步,我们的足迹遍布整个校园,我们的故事也贯穿停留在大学。18岁的恋爱太脆弱了,现实的风一吹就碎……现在的我不再年轻,我也很确定,失去了对爱情的冲动,再也不会觉得爱情是全部,现在的恋爱会带着更加明确的目的,双方的性格、三观、经济基础和生活习惯,对面的那个她是否会成为一生的合伙人 ,我相信也看过没有面包的爱情,但最终仍然会先选择面包……两个人在一起更觉得各取所需,也许图对方一点什么……18岁的爱教会我们如何去爱,它纯粹、勇敢,是我们情感版图的开拓者。它可能脆弱,但那份不顾一切的真诚,一生可能只有一次。经过社会的打磨之后会明白,爱情是我们在认清生活真相后,依然选择与对方并肩而行的决心。给后来者的建议:18岁时,别怕受伤,尽情去体验;工作时,别失勇气,依然要相信爱。每一段真心投入的恋爱,都会让我们成为更完整的人。结尾附上一个故事
面包vs爱情,怎么选?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务