详解Javascript中new()到底做了些什么?
new
是Javascript中一个非常重要的关键字,它实际上是用来创建对象实例的。在使用new
关键字创建对象实例的时候,new
做了以下几件事情:
- 创建一个新的对象,并且将这个新的对象的原型链指向构造函数的原型对象。
- 将这个新的对象作为构造函数的上下文对象(this)来调用构造函数,并传递参数。
- 如果构造函数返回的值是一个对象,那么这个新的对象就会被直接返回,否则,就返回这个新的对象。
下面用一个简单实例来说明上面的过程:
function Person(name, age) {
this.name = name;
this.age = age;
}
let person1 = new Person('Tom', 18);
在上述的代码中,我们创建了一个Person
的构造函数,然后使用new
关键字来创建一个新的Person
对象实例。
在这个过程中,new
做了以下几件事情:
- 创建一个新的对象实例,我们可以称之为
person1
。 - 将
person1
的原型链指向Person.prototype
,这样person1
就可以访问Person.prototype
中定义的属性和方法了。 - 将
Person
函数作为上下文对象(this)来调用,同时传递参数'Tom'
和18
。 - 在构造函数中,我们将参数
'Tom'
和18
分别赋值给了person1
的name
和age
属性。 - 新的对象实例
person1
被返回,也就是说,如果我们在Person
构造函数中加上return
语句,那么会直接返回这个return
语句所指定的对象,而不是返回person1
。
接下来,我们再用一个稍微复杂一些的示例来进一步说明new
关键字的执行过程。在这个示例中,我们将构造函数对象和原型对象分别保存在了变量中,以便于更好地理解。
let Animal = function(name, age) {
this.name = name;
this.age = age;
}
let AnimalPrototype = {
speak: function() {
console.log(this.name + ' is speaking!');
}
}
Animal.prototype = AnimalPrototype;
let animal1 = new Animal('Bob', 2);
let animal2 = new Animal('Mike', 4);
animal1.speak(); // Bob is speaking!
animal2.speak(); // Mike is speaking!
首先,我们定义了一个Animal
构造函数,并且将它的原型链指向了一个AnimalPrototype
对象。然后,我们创建了两个Animal
对象实例animal1
和animal2
,并且分别调用了它们的speak
方法。
在这个示例中,new
关键字做了以下几件事情:
- 创建一个新的对象实例,我们可以称之为
animal1
。 - 将
animal1
的原型链指向AnimalPrototype
对象。 - 将
Animal
函数作为上下文对象(this)来调用,同时传递参数'Bob'
和2
。 - 在构造函数中,我们将参数
'Bob'
和2
分别赋值给了animal1
的name
和age
属性。 - 返回新的对象实例
animal1
。 - 创建一个新的对象实例,我们可以称之为
animal2
。 - 将
animal2
的原型链指向AnimalPrototype
对象。 - 将
Animal
函数作为上下文对象(this)来调用,同时传递参数'Mike'
和4
。 - 在构造函数中,我们将参数
'Mike'
和4
分别赋值给了animal2
的name
和age
属性。 - 返回新的对象实例
animal2
。 - 调用
animal1
和animal2
对象的speak
方法,输出相应的结果。
通过这两个示例,我们可以更好地理解new
关键字的执行过程以及它所做的事情。在日常开发中,我们会经常使用new
关键字来创建对象实例,因此了解new
的工作原理是非常重要的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Javascript中new()到底做了些什么? - Python技术站