📅  最后修改于: 2023-12-03 15:09:57.090000             🧑  作者: Mango
在Javascript中,每个对象都有一个原型对象,它为对象提供了属性和方法。我们可以通过访问对象的原型对象来访问这些属性和方法。在Javascript中,使用构造函数定义的对象都有一个共同的原型对象,即构造函数中的prototype属性。
我们可以简单地将属性添加到原型中,而不是每次都创建属性的副本,因为所有实例都可以访问原型对象。这可以通过给构造函数的原型对象添加属性来实现。例如,如果我们有一个构造函数叫做Person,我们可以向它的原型对象添加一个名为name的属性,如下所示:
function Person(name) {
this.name = name;
}
Person.prototype.name = 'John';
在这个例子中,我们向Person构造函数的原型对象添加了一个name属性,并将其设置为“John”。现在,当我们新建一个Person对象时,它将不会创建一个新的name属性,而是使用原型对象中的属性作为默认值,如下所示:
var person1 = new Person();
console.log(person1.name); //输出:John
我们也可以向构造函数的原型对象中添加方法,以便所有实例都可以访问。例如,我们可以将一个sayHello()方法添加到Person的原型对象中,如下所示:
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
这个方法将在每个Person对象中共享,并且可以通过对象实例调用,如下所示:
var person2 = new Person('Jane');
person2.sayHello(); //输出:Hello, my name is Jane
我们可以通过更改原型对象的属性来更改所有实例共享的默认值。例如,我们可以将Person构造函数的原型对象中的name属性更改为“Mary”,如下所示:
Person.prototype.name = 'Mary';
现在,新建的Person对象将使用更新后的默认值,如下所示:
var person3 = new Person();
console.log(person3.name); //输出:Mary
通过向构造函数的原型对象添加属性和方法,我们可以在所有对象实例之间共享这些属性和方法,并减少多余的内存开销。因为原型对象是每个对象共享的,所以更改它的值将更改所有实例的默认值。