Ссылка на объект js

373
16 июля 2017, 13:07
function _Class(){
 this.test_obj = {
   init: function(){
    document.onmousedown = this._mousedown;
   },
   _mousedown: funtion(){
    //!!! Как отсюда правильно обратиться к объекту test_obj?
  }
 }
}
var Init = new _Class();
Init.test_obj.init();
Answer 1

Стандартный для таких случаев трюк - запомнить this в замыкании:

function _Class(){ 
 const _this = this; 
 this.test_obj = { 
   init: function(){ 
     document.onmousedown = this._mousedown; 
   }, 
   _mousedown: function(){ 
     console.log(_this.test_obj); 
     //!!! Как отсюда правильно обратиться к объекту test_obj? 
   } 
 } 
} 
 
var Init = new _Class(); 
Init.test_obj.init(); 
Init.test_obj._mousedown();

Еще как варинат, воспользоваться bind:

function _Class(){ 
 this.test_obj = { 
   init(){ 
     document.onmousedown = this._mousedown.bind(this); 
   }, 
   _mousedown(){ 
     //!!! Как отсюда правильно обратиться к объекту test_obj? 
     console.log(this); 
   } 
 } 
} 
 
var Init = new _Class(); 
Init.test_obj.init();

Еще один вариант, как избавиться от потери this - обернуть вызов метода в стрелочную функцию:

function _Class(){ 
 this.test_obj = { 
   init(){ 
     document.onmousedown = () => { 
       this._mousedown() 
     }; 
   }, 
   _mousedown(){ 
     //!!! Как отсюда правильно обратиться к объекту test_obj? 
     console.log(this); 
   } 
 } 
} 
 
var Init = new _Class(); 
Init.test_obj.init();

READ ALSO
vue multilanguage. Смена языка по клику

vue multilanguage. Смена языка по клику

Товарищи, использую этот плагин, для перевода сайта на разные языкиВопрос: как добраться до this

313
Uncaught TypeError: $ is not a function

Uncaught TypeError: $ is not a function

В консоли отладчика при попытке загрузить страницу появляется сообщение:

227