Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2016, 12:24
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Глобальный контекст (смена контекста)
В этом коде, результат будет 81, это я понимаю

var x = 9;
var module = {
  x: 81,
  getX: function() { return this.x; }
};

module.getX();


Но почему, если метод getX указать ссылкой для переменной

var getX = module.getX


И потом вызывать эту переменную

getX()


То x берётся из глобального объекта window, а не из объекта module? Почему так?

По идеи

var getX = module.getX это ссылка

var getX = module.getX() а это присвоение и сразу вызов

Почему меняется контекст?
Ответить с цитированием
  #2 (permalink)  
Старый 22.09.2016, 12:40
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

DivMan,
http://getinstance.info/articles/jav...ution-context/
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2016, 13:02
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Там совсем другой пример
Ответить с цитированием
  #4 (permalink)  
Старый 22.09.2016, 13:50
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

https://learn.javascript.ru/object-methods - тут подробно и внятно
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2016, 14:10
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,663

DivMan, потому что контекст подключается при вызове и через точку, в твоем случае получается так window.getX(), как известно глобальный window не пишется но подразумевается...

...поэтому существуют функции типа bind для привязки контекста
var getX = module.getX.bind(module);
	getX();
...и функции типа call и apply для явного указания контекста при вызове
var getX = module.getX;
	getX.call(module);
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2016, 14:16
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Я разобрался.

Я просто не понимал, то, что то переменной var getX = module.getX; присваивается только метод getX, а остальное содержимое самого объекта module игнорируется
Ответить с цитированием
  #7 (permalink)  
Старый 23.09.2016, 11:34
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

DivMan,
Вам же объясняют, что this меняется.
Если без this

var x = 9;
var module = {
  x: 81,
  getX: function() { return module.x; }
};

alert(module.getX());
var getX = module.getX;
alert(getX());
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить контекст контекста. Keyman Общие вопросы Javascript 1 09.04.2016 00:26
Два контекста в контексте onload kostyanet Events/DOM/Window 6 03.01.2014 10:15
не понимаю как задать правильный контекст loz Dojo toolkit 2 17.02.2011 18:36
изменение текущего контекста функции vkovalev jQuery 13 16.03.2009 12:52
тест magistr_bender Оффтопик 44 25.10.2008 19:28