在函数ManA中创建新对象或调用构造函数ManB之间有什么区别吗?
function ManA(name, age)
{
return { name: name, age: age, getAge: function() { return this.age; } };
}
function ManB(name, age)
{
this.name = name;
this.age = age;
this.getAge = function() { return this.age; };
}
var manA = ManA("Tom", 28);
var manB = new ManB("Frank", 25);
由于
答案 0 :(得分:3)
区别在于manA
[[Ptototype]]
链是:
manA -> Object.prototype -> null
并且manB
[[Prototype]]
链是:
manB -> ManB.prototype -> Object.prototype -> null
所以在第二种情况下,您可以通过将方法添加到manB
来向ManB
(以及ManB.prototype
的所有实例)添加方法。您不能对ManA
个实例执行此操作[请参阅注释]。所以getAge
方法可以在构造函数的原型上,为每个实例节省几个字节的内存。
您可以向manA
原型链添加方法,但唯一可用的方法是Object.prototype
,因此每个对象都将继承它们。这被认为是非常糟糕的风格,你应该单独留下内置物品。