Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   В чем различие добавления свойств/функций классу (https://javascript.ru/forum/misc/26301-v-chem-razlichie-dobavleniya-svojjstv-funkcijj-klassu.html)

Policeman 03.03.2012 22:21

В чем различие добавления свойств/функций классу
 
Можете подсказать в чем различие добавление свойств/функций классу

Например

function user(){
   this.getName = function(){
      return "Vasya";
   }
}

var u = new user();
u.getName();


или все то же только

function user(){
   
}

user.prototype.getName = function(){
     return "Vasya";
}

var u = new user();
u.getName();


Надеюсь я не чушь написал:D

DreamTheater 03.03.2012 22:38

В первом случае используется так называемый перегруженный конструктор. По факту, объект не имеет никаких свойств, они у него появляются только в момент вызова конструктора. Этот метод не рекомендуется использовать по различным соображениям.

FINoM 03.03.2012 22:46

Цитата:

Сообщение от DreamTheater
Этот метод не рекомендуется использовать по различным соображениям.

Слышал только о производительности, а о «различных» — нет.

DreamTheater 03.03.2012 22:48

Цитата:

Сообщение от FINoM (Сообщение 161213)
Слышал только о производительности, а о «различных» — нет.

Производительность это первое. Как написать юнитест, который будет проверять существование того или оного свойства в классе без его инициализации?

FINoM 03.03.2012 22:50

Цитата:

Сообщение от DreamTheater
Как написать юнитест, который будет проверять существование того или оного свойства в классе без его инициализации?

Зачем?
Да и есть такая штука, как сall и apply.

DreamTheater 03.03.2012 22:56

В случае перегруженного конструктора невозможно достучаться к свойствам объекта, потому что их не существует.

FINoM 03.03.2012 23:01

Цитата:

Сообщение от DreamTheater
В случае перегруженного конструктора невозможно достучаться к свойствам объекта, потому что их не существует.

call, apply.

DreamTheater 03.03.2012 23:11

function Class() {
    this.property = "property";

    this.method = function () {};
}


Каким образом я могу получить доступ к property или method?

FINoM 03.03.2012 23:15

Цитата:

Сообщение от DreamTheater
Каким образом я могу получить доступ к property или method?

var o = {};
Class.call(o);
// а здесь проверять, есть ли у "o" соответствующие методы и свойства

DreamTheater 03.03.2012 23:24

Цитата:

Сообщение от FINoM (Сообщение 161236)
var o = {};
Class.call(o);
// а здесь проверять, есть ли у "o" соответствующие методы и свойства

В таком случае конструктор выполняется как функция, а мы хотим этого избежать.


Часовой пояс GMT +3, время: 22:58.