2014-01-15 3 views
-1

В чем разница между определением методов в прототипе отдельно по сравнению с объектом?Определение методов на прототипе

Пример:

function Example() { 
    this.Test(); 
} 

Example.prototype.Test = function() { 
    alert("Example"); 
}; 

вместо:

function Example() { 
    this.Test(); 
} 

Example.prototype = { 
    Test: function() { 
    alert("Example"); 
    } 
}; 
+2

В первую очередь вы добавляете метод к прототипу. Во втором вы _replacing_ прототип. – Andy

+0

Аналогичный вопрос: http://stackoverflow.com/questions/4848221/define-constructor-prototype-with-object-literal?rq=1 –

+0

Это влияет на то, как работает прототип? – monkee52

ответ

1

Это разница между добавлением к прототипа и замены его.

Единственное место, где это действительно вероятно, чтобы сделать разницу в такого рода сценарий, который является относительно редким (и тем не менее, я избежать замены прототипов из-за него):

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 с новым объектом, он на самом деле не имеет никакого существенного различия.

Смежные вопросы