📜  我们可以简单地将属性添加到原型中,而不是每次都创建属性的副本,因为所有实例都可以访问原型对象. - Javascript(1)

📅  最后修改于: 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
总结

通过向构造函数的原型对象添加属性和方法,我们可以在所有对象实例之间共享这些属性和方法,并减少多余的内存开销。因为原型对象是每个对象共享的,所以更改它的值将更改所有实例的默认值。