Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как избавиться от this (https://javascript.ru/forum/misc/58316-kak-izbavitsya-ot.html)

RFWire 15.09.2015 09:47

Как избавиться от 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;
}());

Skipp 15.09.2015 10:21

Это не namespace, а замыкание, причём с помощью анонимной функции)))
И почитайте про bind, call и apply.

RFWire 15.09.2015 10:56

Ок, спасибо)

Т.е. bind, call и apply позволят избавиться от избыточного использования this?

Skipp 15.09.2015 11:29

RFWire,
Что-то я видимо не проснулся когда писал, по сути это не поможет))
Либо через prototype, либо return {a:'',b:''}

newKingOfTheBlock 15.09.2015 11:49

С 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)

но, если плохо представляешь, как оно работает, лучше не использовать.

caetus 15.09.2015 12:13

почитай о this http://frontender.info/demystifying-this-in-javascript/

newKingOfTheBlock 15.09.2015 12:21

caetus,
Параша по твоей ссылке.
>>является ссылкой на родительский объект.
this никогда ни на что не ссылается, он динамически связывается. Это обычное, дефолтное поведение для переменных, в языках, где по дефолту динамическое связывание. Автор сам ННП.

caetus 15.09.2015 12:49

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


https://developer.mozilla.org/ru/doc...Operators/this

caetus 15.09.2015 12:51

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


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


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

newKingOfTheBlock 15.09.2015 13:27

Цитата:

Сообщение от caetus
принимает !== ссылается ?

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


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