首页 > 技术文章 > js的构造函数

zycbloger 2016-06-02 18:25 原文

var a = function(b) {
  this.b = b;     //属性
};

a.prototype.f = function() {
    return this.b;  //方法
};

var aa = new a("Hello World!");
aa.b // "Hello World!"
aa.f() // "Hello World!"

1.

构造函数的属性是属于实例的而且两个互不干扰,在不同的堆栈中

构造函数上定义的方法,不是持有同一引用,实例的方法存放在内存不同的地方

 

2.

在prototype上定义的属性,在所有的实例中都共享同一份,在任何地方对其设置,所有的实例都同时产生变化

在prototype上定义的方法,持有同一引用,实例的方法存放在同一块内存区域

 

3.总结

在构造函数中定义的属性,每个实例都有一个副本,互不影响;但是在prototype上定义的属性,在所有的实例中共享同一个属性,对属性的改变会影响到所有的实例。(当改变构造函数的prototype的话,其他实例也会根着改变!)
那么属性最好定义在构造函数中,而方法最好定义在prototye中,否则每个实例的方法都占据一块内存。

推荐阅读