当前位置: 首页 > news >正文

new操作符做了什么?

new是什么?

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

function Person (name,age) {this.name = namethis.age = age
}
Person.prototype.sayName  = function () {console.log(this.name)
}
let man = new Person('xl',20)
console.log(man) // Person { name: 'xl', age: 20 }
man.sayName() // 'xl'
  • new出来的实例可以访问到构造函数中的属性
  • new出来的实例可以访问到构造函数原型链上的方法和属性

如果在构造函数内加上返回值是什么结果呢?

  • 返回基本数据类型

    function Car (price) {this.price = pricereturn 20
    }
    let bigCar = new Car(90)
    console.log(bigCar.price) // 90
    

    返回基本数据类型时,返回值会被忽略

  • 返回引用数据类型

    function Car (price) {this.price = pricereturn { km: 200 }
    }
    let bigCar = new Car(90)
    console.log(bigCar.price, bigCar.km) // undefined, 200
    

    返回引用数据类型,会被正常使用

new做了什么工作呢?

  1. 新建一个对象obj
  2. 把obj的和构造函数通过原型链连接起来
  3. 将构造函数的this指向obj
  4. 如果该函数没有返回对象,则返回this
  // new操作符做了什么?function newFun(Fun, ...args) {// 1.先创建一个空对象let newObj = {};// 2. 把空对象的原型,指向构造函数的原型对象newObj.__proto__ = Fun.prototype;// 3. 把构造函数的this绑定到新的空对象身上const result = Fun.apply(newObj, args);console.log('result是:', result);// 4. 根据构造函数返回的类型判断,如果是值类型,则忽略返回值,直接返回对象;如果是引用类型,则返回这个引用类型console.log('返回的是引用类型吗?', result instanceof Object);return result instanceof Object ? result : newObj;}function Person(name) {this.name = name;// 1. 如果构造函数没有返回值,则在new的时候result是undefined,就会直接返回对象// 2. 如果构造函数的返回值是值类型,在new的时候会忽略该返回值// return 111;// return '返回值类型--字符串';// return true;// 3. 如果构造函数的返回值是引用类型,在new的时候会返回该引用类型// return { aaa: 'aaa' };}Person.prototype.say = function () {console.log('hello');};const p1 = newFun(Person, '张三');p1.say();console.log(p1)
http://www.lryc.cn/news/21955.html

相关文章:

  • Java_IO流,书城IO版
  • 2023自动化测试岗位需求的 7 项必备技能 (最新版)
  • 【华为OD机试模拟题】用 C++ 实现 - 路灯照明(2023.Q1)
  • 学到贫血之-贫血模型和充血模型
  • Java常用组件面试题
  • MySQL常见问题的解决方法
  • 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
  • 容斥恒等式的证明
  • Java中的this与super关键字深度解析
  • CSS3新增的视口单位Vh、Vw单位
  • 【Linux】yum安装docker指定版本
  • SpringBoot相关操作
  • Python super()函数:调用父类的构造方法
  • @ConfigurationProperties在方法上的使用
  • 【QT】如何查找和获取界面上的子部件(findChild 和 findChidren)
  • MIT 6.S081学习笔记
  • 《网络安全入门到精通》 - 2.1 - Windows基础 - DOS命令Windows防火墙Windows共享文件
  • 八、Vben框架动态生成可编辑Table
  • 浅谈ERP数据的重要性
  • 【RabbitMQ笔记06】消息队列RabbitMQ七种模式之Topics主题模式
  • ChatGPT似乎有的时候并不能搞懂Java的动态分派,你懂了吗?
  • 【C++初阶】vector的模拟实现
  • 微信小程序、小游戏的流量主一般可以赚多少钱?
  • jni-Demo-基于linux(c++ java)
  • 指针的进阶——(1)
  • 电商平台的促销活动如何抵御大流量的ddos攻击
  • 代码随想录-48-104. 二叉树的最大深度
  • 【Vue3源码】第六章 computed的实现
  • Java基础之注解
  • 三、线性表