在javascript中创建对象

时间:2012-12-02 19:09:04

标签: javascript

在函数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);

由于

1 个答案:

答案 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,因此每个对象都将继承它们。这被认为是非常糟糕的风格,你应该单独留下内置物品。