javascript oop。构造函数与原型

时间:2013-09-13 22:35:53

标签: javascript oop

我可以理解创建和对象作为构造函数和以文字符号创建对象有什么区别,什么时候更好地使用每个定义,但我无法理解以下两种情况之间的区别:

function Obj(){
  this.foo = function(){...}
}


function Obj(){}
Obj.prototype.foo = function(){...}

两者都在做同样的事情。两者都将使用相同的var objNew = new obj();

进行实例化

那么有什么区别以及何时使用每个概念?

2 个答案:

答案 0 :(得分:1)

第一个较慢,因为每次调用构造函数时都会创建它。

答案 1 :(得分:1)

prototype由所有实例共享。让我们比较一下:

function Obj(){
  this.foo = function(){...}
}
var o1 = new Obj();
var o2 = new Obj();
console.log(o1.foo === o2.foo); // false

function Obj(){}
Obj.prototype.foo = function(){...}
var o1 = new Obj();
var o2 = new Obj();
console.log(o1.foo === o2.foo); // true

使用原型意味着一次声明原型属性和函数,并且每个人都共享它。一百万个对象,一个foo函数。

“在构造函数中”方法在每次运行时为实例创建一个本地foo函数。一百万个对象,一百万foo个函数各自绑定了自己的对象。