Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Зачем нужно "var self = this" (https://javascript.ru/forum/misc/69099-zachem-nuzhno-var-self-%3D.html)

nikel 29.05.2017 17:45

Зачем нужно "var self = this"
 
Изучаю Knockout, и в примерах начал встречать использование конструкции "var self = this" в функциях-конструкторах.
'use strict'
function WebmailViewModel() {
    // Data
    var self = this;
    self.prop1 = "prop1";
    self.prop2 = "prop2";
    self.prop3 = "prop3";
};

function NewWebmailViewModel() {
    // Data
    this.prop1 = "prop1";
    this.prop2 = "prop2";
    this.prop3 = "prop3";
};


var mailOne = new WebmailViewModel();
var mailTwo = new NewWebmailViewModel();

console.log(mailOne == mailTwo); //false

for (var key in mailOne) {
	console.log(mailOne[key] === mailTwo[key]) //true true true
};


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

ruslan_mart 29.05.2017 18:08

nikel, в данном случае - смысла нет. А вообще такое нужно, чтобы использовать основной контекст внутри вложенной функции.

function Abc() {
    var self = this;

    console.log(this); // Abc

    var fn = function() {
         console.log(this); // Window
         console.log(self); // Abc
    };

    fn();
}

new Abc();

nikel 29.05.2017 18:12

Спасибо за простой и понятный ответ.

j0hnik 29.05.2017 21:20

Спасибо) магия )


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