向构造函数或原型添加属性之间的区别

Difference between adding properties to constructor or prototype

本文关键字:之间 区别 属性 添加 构造函数 原型      更新时间:2023-09-26

我看到了向class添加属性的两种方法。

  1. 在构造函数中定义属性
  2. 在原型中定义属性

我想知道它们之间的区别。这是代码和JsBin

var show = function() {
  console.log('Show started..');
  // Adding properties in constructor
  this.properties = {
    name: 'Testing javascript'
  };
};
show.prototype.getName = function() {
  console.log(this.properties.name);
};
// Adding properties to prototype
show.prototype.properties = {
  name: 'Testing prototype'
};
var myShow = new show();
myShow.getName();

所有实例的原型成员都是共享的:

var Person=function(name){
  this.obj.name=name;
};
Person.prototype.obj={name:"Default"};
var ben = new Person("Ben");
var leo = new Person("Leo");
console.log(ben.obj.name);//logs Leo

在上面的代码中,ben和leo共享obj成员。行为(=函数)通常被放在原型上,因为它们不会因实例而改变。在原型上实现这一点将节省初始化和内存,因为无论创建多少个实例,原型上的函数都只存在一次。

在具有this.someProp=...的构造函数函数体中声明的成员是特定于实例的。

有关构造函数函数和原型的更多信息,你可以查看这个答案。