Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с this (https://javascript.ru/forum/misc/43093-problema-s.html)

Arramis 21.11.2013 17:19

проблема с this
 
Здравстуйте, суть проблемы в следующем:
есть такой код:
var tools = {
		index: 1,
		nextOne: document.getElementById('next')
	},
		
	f = (function() {
		function F(tools) {
			this.index = 1;
		};
		
		F.prototype.someMethod = function() {
			tools.nextOne.onclick = function() { 
				alert(this.index);
			};	
		};
		
		return new F();		
	})();

	f.someMethod.apply(f, []); // undefined
не могу понять почему при вызове метода someMethod с явно указанным контекстом все равно выводится undefined ??

jsru_ 21.11.2013 17:52

this в данном случае указывает на объект до точки, если хочешь получить 1, то делай ссылку на объект типа var self = this, вида
F.prototype.someMethod = function() {
var self = this
и внутри onclick вызывай alert(self.index);

Arramis 21.11.2013 18:01

Цитата:

Сообщение от jsru_ (Сообщение 282126)
если хочешь получить 1, то делай ссылку на объект типа var self = this, вида
F.prototype.someMethod = function() {
var self = this

так это понятно, но что если методов в прототипе будет скажем штук 15, не писать же в каждом из них по
var self = this;
Повторение кода получается =)

jsru_ 21.11.2013 18:07

то ты не можешь понять почему , а теперь пишешь "так это понятно" , определись уже; если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.

Arramis 21.11.2013 18:29

Цитата:

Сообщение от jsru_ (Сообщение 282132)
то ты не можешь понять почему , а теперь пишешь "так это понятно" , определись уже; если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.

извиняюсь, не корретктно сформулировал проблему, да я хочу в любом месте класса иметь доступ к будущему объекту.
Цитата:

Сообщение от jsru_ (Сообщение 282132)
если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.

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

nerv_ 21.11.2013 20:58

F.prototype.someMethod = function() {
    tools.nextOne.onclick = function() { 
        alert(this.index);
    }.bind(this);	
};


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