new操作符都做了哪些事情

Posted le-cheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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博客

以上是关于new操作符都做了哪些事情的主要内容,如果未能解决你的问题,请参考以下文章

Student s = new Student();在内存中做了哪些事情?

Spring Cloud都做了些什么

Java虚拟机创建一个对象都做了什么?

9大Python最常用的数据分析库,在2018都做了哪些更新?

从架构演进的角度聊聊spring cloud都做了些什么?

class类和构造函数在使用new创建实例对象时候都做了什么?