ConstructorFunc.property против ConstructorFunc.prototype.property - PullRequest
1 голос
/ 18 октября 2011

Есть ли разница между приведенными ниже декларациями?

декларация 1 :

someName.test1 = function() {alert("test1")}

декларация 2 :

someName.protoype.test2 = function() {alert("test2")}

Дубликат Разница между свойствами класса и прототипом функции в Javascript

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Да, есть разница:

someName.test1 = function() {alert("test1")} 

добавляет эту функцию к объекту (или классу) someName.

someName.protoype.test2 = function() {alert("test2")}

добавляет эту функцию к всем экземплярам класса someName


Для реального примера посмотрите на это:

Object.getOwnPropertyNames = function(obj)  { ... };

, которая является просто функцией namespace в классе Object, принимая интересующий объект в качестве первого параметра, тогда как если бы он был записан:

Object.prototype.getOwnPropertyNames = function() { ... };

Тогда каждый Object будет иметь этот метод, и он будет использоваться так:

obj.getOwnPropertyNames();

[но не делайте этого, поскольку добавление методов к прототипу Object не одобряется!]

1 голос
/ 18 октября 2011

Да.В случае, если вы связываете test2 со всей цепочкой прототипов объекта somename. Таким образом, вы, как правило, добавляете метод в класс, который доступен для всех экземпляров someName.В случае если он просто добавляется к этому конкретному объекту.

Это может немного смущать изначально, но если вы воспринимаете это так, как если вы хотите добавить свойство или метод ко всем экземплярам класса (someName), чем вы будете использовать прототип.И если вы хотите просто добавить его к одному объекту (someName), вы будете использовать первый шаг.

...