创建对象实例
- 基本概念:在JavaScript前端开发中,
new
关键字主要用于创建一个构造函数的实例。构造函数是一种特殊的函数,用于初始化新创建的对象。例如,定义一个简单的构造函数来创建一个Person
对象:function Person(name, age) { this.name = name; this.age = age; }
- 使用方式:当使用
new Person('Alice', 25)
时,就会创建一个Person
类型的新对象。这个新对象包含了name
和age
两个属性,其值分别为'Alice'
和25
。在内存中,会开辟一块新的空间来存储这个对象,并且这个对象是独立于其他对象存在的,每个通过new
关键字创建的Person
对象都有自己的一套name
和age
属性。
- 基本概念:在JavaScript前端开发中,
建立对象的原型链
- 原型链关联:
new
关键字在创建对象的同时,会将新对象的原型(__proto__
)指向构造函数的原型对象(prototype
)。例如,继续在Person
构造函数的原型对象上添加一个方法:Person.prototype.sayHello = function () { console.log(`Hello, my name is ${ this.name}`); };
- 继承机制:当通过
new Person('Alice', 25)
创建一个对象后,这个新对象可以访问sayHello
方法。这是因为new
操作使得新对象的原型链与构造函数的原型对象建立了关联。在查找对象的属性和方法时,如果对象本身没有该属性或方法,JavaScript会沿着原型链向上查找,直到找到对应的属性或方法或者到达原型链的顶端(Object.prototype
)。所以,新创建的Person
对象可以通过原型链继承Person.prototype
上的方法,这是实现JavaScript对象继承的一种重要方式。
- 原型链关联:
自动执行构造函数并绑定this
- 构造函数执行:
new
关键字会自动调用构造函数,并且在构造函数内部,this
关键字会自动绑定到新创建的对象上。例如,在Person
构造函数中,this.name = name
和this.age = age
这两行代码,this
指代的就是通过new
关键字新创建的那个对象。这样就可以方便地在构造函数中初始化对象的属性,将传入的参数赋值给对象的相应属性。 - 返回值规则:一般情况下,构造函数如果没有显式地返回一个对象,
new
操作会返回新创建的对象。但如果构造函数返回了一个对象,则new
操作会返回这个返回的对象。例如:
这种返回值规则在某些特殊情况下可以用于改变function AnotherPerson(name, age) { this.name = name; this.age = age; return { otherName: 'Other Name' }; } let anotherPerson = new AnotherPerson('Bob', 30); // anotherPerson是{ otherName: 'Other Name' },而不是包含name和age属性的对象
new
操作的默认行为,不过在大多数常规的构造函数中,通常不会返回一个新的对象,而是通过this
来初始化并返回新创建的对象。
- 构造函数执行: