我可以理解创建和对象作为构造函数和以文字表示法创建对象的区别以及何时更好地使用每个定义,但我无法理解以下两种情况之间的区别:
function Obj(){
this.foo = function(){...}
}
function Obj(){}
Obj.prototype.foo = function(){...}
两者都在做同样的事情。两者都将使用相同的实例化var objNew = new obj();
那么有什么区别以及何时使用每个概念?
我可以理解创建和对象作为构造函数和以文字表示法创建对象的区别以及何时更好地使用每个定义,但我无法理解以下两种情况之间的区别:
function Obj(){
this.foo = function(){...}
}
function Obj(){}
Obj.prototype.foo = function(){...}
两者都在做同样的事情。两者都将使用相同的实例化var objNew = new obj();
那么有什么区别以及何时使用每个概念?
第一个比较慢,因为每次调用构造函数时都会创建它。
由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
函数,每个都绑定了自己的对象。