Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.09.2015, 09:47
Новичок на форуме
Отправить личное сообщение для RFWire Посмотреть профиль Найти все сообщения от RFWire
 
Регистрация: 08.04.2015
Сообщений: 4

Как избавиться от this
Изучаю Javascript, помогите разобраться. Поместил свой код в namespace
и теперь весь код засорен указанием "this." перед каждой переменной. Читаемость кода стала намного хуже, чем это было у меня до заворачивания в namespace.

Можно как-то избавиться от этого?

Не знаю, может быть в начале функции вызвать какую-нибудь функцию с указанием области действия...

this.myNameSpace = this.myNameSpace || {};

(function () {
	function MyApp() {
		this.init();
	}

	MyApp.prototype = {
		
		displayStatus: null
		
		MDNG: [
					"_1ss",
					"_2nn",
					"_3rr",
					"_4ee",
					"_5tt",
					"_6ii"
				],
		
		mdng: 0,
		
		init: function () {
			
			this.displayStatus = "Some text here";
			this.LoadMan("loman" + this.LDNG[this.ldng] + ".json", "himan" + this.LDNG[this.ldng] + ".json");
			
			return this;
		}
		
		LoadMan: function () {
			
			this.displayStatus = "Some text here";
			this.LoadMan("srex" + this.MDNG[this.mdng] + ".json", "srex2" + this.MDNG[this.mdng] + ".json");
		}
	
	myNameSpace.MyApp = MyApp;
}());
Ответить с цитированием
  #2 (permalink)  
Старый 15.09.2015, 10:21
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Это не namespace, а замыкание, причём с помощью анонимной функции)))
И почитайте про bind, call и apply.
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2015, 10:56
Новичок на форуме
Отправить личное сообщение для RFWire Посмотреть профиль Найти все сообщения от RFWire
 
Регистрация: 08.04.2015
Сообщений: 4

Ок, спасибо)

Т.е. bind, call и apply позволят избавиться от избыточного использования this?
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2015, 11:29
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

RFWire,
Что-то я видимо не проснулся когда писал, по сути это не поможет))
Либо через prototype, либо return {a:'',b:''}
__________________
.
Ответить с цитированием
  #5 (permalink)  
Старый 15.09.2015, 11:49
Аспирант
Посмотреть профиль Найти все сообщения от newKingOfTheBlock
 
Регистрация: 13.09.2015
Сообщений: 32

С with можно это сделать
Foo=function(){this.init()}
Foo.prototype={
  foo: undefined,
  bar: undefined,
  init: function(){
    with(this){foo=1;bar=2}
  }
}
 
foo=new Foo
console.log(foo)

но, если плохо представляешь, как оно работает, лучше не использовать.
Ответить с цитированием
  #6 (permalink)  
Старый 15.09.2015, 12:13
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

почитай о this http://frontender.info/demystifying-this-in-javascript/
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2015, 12:21
Аспирант
Посмотреть профиль Найти все сообщения от newKingOfTheBlock
 
Регистрация: 13.09.2015
Сообщений: 32

caetus,
Параша по твоей ссылке.
>>является ссылкой на родительский объект.
this никогда ни на что не ссылается, он динамически связывается. Это обычное, дефолтное поведение для переменных, в языках, где по дефолту динамическое связывание. Автор сам ННП.
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2015, 12:49
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

В глобальном контексте выполнения (за пределами каких-либо функций), this ссылается на глобальный объект вне зависимости от использования в строгом или нестрогом режиме.


https://developer.mozilla.org/ru/doc...Operators/this
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2015, 12:51
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

>>является ссылкой на родительский объект.


Когда функция вызывается как метод объекта, используемое в этой функции ключевое слово this принимает значение объекта, по отношению к которому вызван метод.


принимает !== ссылается ?

Последний раз редактировалось caetus, 15.09.2015 в 12:53.
Ответить с цитированием
  #10 (permalink)  
Старый 15.09.2015, 13:27
Аспирант
Посмотреть профиль Найти все сообщения от newKingOfTheBlock
 
Регистрация: 13.09.2015
Сообщений: 32

Сообщение от caetus
принимает !== ссылается ?
С чего бы? если только в смысле, на один крохотный момент. Под ссылкой обычно понимается нечто статичное. А тут связь теряется сразу по выходу из текущего окружения.

Последний раз редактировалось newKingOfTheBlock, 15.09.2015 в 13:30.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как сделать такую страницу mortido Элементы интерфейса 11 02.10.2014 07:20
Table - как избавиться от автоматич. уменьшения ширины при уменьшении размера экрана? eugen35 (X)HTML/CSS 5 22.08.2014 12:25
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 13:35
jquery accordion как избавиться от прокрутки страницы. cesar5 Events/DOM/Window 0 24.01.2012 15:52