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

时间:2013-12-11 05:18:22

标签: javascript class constructor prototype

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

  1. 在构造函数中定义属性
  2. 在原型中定义属性
  3. 我想知道它们之间的区别。以下是代码和 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();
    

1 个答案:

答案 0 :(得分:3)

原型的成员将为所有实例共享:

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=...声明的成员是特定于实例的。

有关构造函数和原型的更多信息,您可以查看this answer