首页 > 其他分享 >new操作符都做了哪些事情

new操作符都做了哪些事情

时间:2023-06-21 15:00:10浏览次数:39  
标签:name 哪些 对象 age Person 操作符 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博客

标签:name,哪些,对象,age,Person,操作符,new,构造函数
From: https://www.cnblogs.com/le-cheng/p/17493772.html

相关文章

  • 怎么投资黄金?可以在哪些国际黄金交易市场完成
    国际黄金交易市场,是指集中进行黄金买卖的交易场所,黄金交易所一般都是在各个国际金融中心,是国际金融市场的重要组成部分。投资者需要在国际黄金交易市场完成交易。2013年,世界上已经形成了以下这些主要的国际黄金交易市场。国际黄金交易市场之苏黎世瑞士苏黎世由于其银行业雄厚实力的......
  • 美股怎么交易?需要满足哪些美股打新参与条件?
    美股打新就是在美国公司上市之前以发行价申购该公司的股票。美股打新优势明显,也得到很多投资者的青睐。参与美股打新,首要的就是满足美股打新参与条件。美股打新参与条件一、清楚打新特点美股打新具备参与门槛低、新股申购机制、申购的多中得多、资金成本低、新股会破发等特点。美股......
  • 武汉星起航:亚马逊北美与欧洲市场最受欢迎的产品品类有哪些?
    亚马逊作为全球最大的电子商务平台之一,其在北美和欧洲市场上拥有广泛的产品品类。在这两个市场上,有几个品类备受消费者的喜爱,它们分别是电子产品、美容和个人护理、健康类产品、家居用品、玩具和游戏,以及服装和配饰。首先,电子产品一直是亚马逊在北美和欧洲市场上最受欢迎的品类之一......
  • 武汉星起航跨境:常见的亚马逊站外推广渠道有哪些?
    作为亚马逊卖家,站外推广是提升产品曝光度和销售量的重要策略之一。除了在亚马逊平台内进行推广,卖家还可以利用多种站外推广渠道来吸引更多潜在买家。星起航浅分享下亚马逊卖家常用的站外推广渠道:社交媒体广告:利用社交媒体平台如Facebook、Instagram、Twitter等进行广告投放是一种有......
  • 产品经理做接口对接要做哪些工作
    随着互联网的发展,各种应用和系统之间的数据交换变得越来越频繁和重要。而在进行数据交换时,接口对接是一个非常关键的环节。作为产品经理,接口对接是必不可少的工作之一,而在进行接口对接时,需要完成以下工作。1.明确需求在进行接口对接前,首先需要明确业务需求。要了解需要对接哪些......
  • MySQL有哪些锁?
    MySQL有哪些锁?按锁粒度分类,有行级锁、表级锁和页级锁。行级锁是mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁的类型主要有三类:RecordLock,记录锁,也就是仅仅把一条记录锁上;Gap......
  • CSS3有哪些新特性
    CSS3引入了很多新特性,比如:1.选择器:CSS3引入了新的选择器,如伪类选择器、伪元素选择器等,使得选择元素更加灵活和精确。2.边框圆角:CSS3允许通过border-radius属性为元素的边框添加圆角,创建圆形、椭圆形或具有不同角度的矩形边框。3.盒阴影:使用box-shadow属性,可以为元素添加......
  • 获得class对象的方式有哪些?
    获取class对象的方式有哪些?方式一:通过对象获得——已知某个类的实例,调用该实例的getClass()方法获得Class对象ClassaClass1=student.getClass();方式二:.forName获得——已知一个类的全类名,且该类在类路径下,可以通过Class类的静态方法forName()方法获取,但需抛出异常ClassaC......
  • [Typescript 5.2] New Keyword: using
    TypeScript5.2willintroduceanewkeyword-'using'-thatyoucanusetodisposeofanythingwitha Symbol.dispose functionwhenitleavesscope.Thiscansimpfiythetry/finallyrelatedcode:function*g(){consthandle=acquireFileHa......
  • BUUCTF NewStarCTF 公开赛赛道Week2 Writeup
    文章目录WEEK2WEBWord-For-You(2Gen)IncludeOneUnserializeOneezAPIMISCYesecnodrumsticks2Coldwinds'sDesktop奇怪的二维码qsdz'sgirlfriend2WEEK2WEBWord-For-You(2Gen)题目描述哇哇哇,我把查询界面改了,现在你们不能从数据库中拿到东西了吧哈哈(不过为了调试的代码似乎忘......