Это разница между добавлением к прототипа и замены его.
Единственное место, где это действительно вероятно, чтобы сделать разницу в такого рода сценарий, который является относительно редким (и тем не менее, я избежать замены прототипов из-за него):
var f = new Foo();
function Foo() {
}
Foo.prototype = {
test: function() { }
};
f.test(); // Fails!
Live Copy | Live Source
Это не удается, так как объект f
создается с Foo
«s оригинальный объекта-прототипа, но затем позже заменить этот объект-прототип с новым. f
по-прежнему использует старый, у которого нет свойства test
.
Это работает:
var f = new Foo();
function Foo() {
}
Foo.prototype.test = test: function() { };
f.test(); // Works
... потому что вы просто добавить к объекту, который f
уже использует в качестве прототипа. Live Copy | Live Source
При условии f
не будет создан до после вы не заменили Foo.prototype
с новым объектом, он на самом деле не имеет никакого существенного различия.
В первую очередь вы добавляете метод к прототипу. Во втором вы _replacing_ прототип. – Andy
Аналогичный вопрос: http://stackoverflow.com/questions/4848221/define-constructor-prototype-with-object-literal?rq=1 –
Это влияет на то, как работает прототип? – monkee52