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