0

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

谢谢

4

1 回答 1

3

不同的是,manA [[Ptototype]]链条是:

manA -> Object.prototype -> null

manB [[Prototype]]链条是:

manB -> ManB.prototype -> Object.prototype -> null

所以在第二种情况下,您可以通过将方法manB添加ManBManB.prototype. 你不能用ManA实例来做到这一点[见注]。所以该getAge方法可以在构造函数的原型上,为每个实例节省几个字节的内存。

笔记

您可以将方法添加到manA原型链,但唯一可用的是Object.prototype,因此每个对象都将继承它们。这被认为是非常糟糕的风格,你应该不理会内置对象。

于 2012-12-02T20:38:12.850 回答