Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Альтернативные способы изменения контекста (https://javascript.ru/forum/misc/52208-alternativnye-sposoby-izmeneniya-konteksta.html)

Siend 08.12.2014 15:56

Альтернативные способы изменения контекста
 
Знаю что можно вызвать функцию с нужным контекстом использую bind, но сейчас интересует альтернативный способ.

столкнулся с такой ситуацией, когда абсолютно ко всем элементам нужно обратиться не через this, а через this.parent.

Ну, думая что самый умный, я и написал

this = this.parent


да только не прокатило >< есть ли какой-то иной способ такой записи?
(без вызова функции с bind, т.е. работаем уже внутри функции)

ruslan_mart 08.12.2014 16:02

var obj = {
   a: {
      b: function() {
          
      }
   }
}

obj.a.b.call(obj);

Siend 08.12.2014 16:10

ну не совсем то что имел ввиду, но все равно спасибо

Deff 08.12.2014 16:17

Цитата:

Сообщение от Siend
столкнулся с такой ситуацией, когда абсолютно ко всем элементам нужно обратиться не через this, а через this.parent.

Имхо я бы нашел нормальный редактор с оптовой заменой контекста, который бы заменил оптом и сразу this на this.parent , либо Вы задачу объясняете для экстрасенсорного восприятия.
Чем запутаннее поставлен вопрос и без примеров хотя бы кусков собственной реализации, тем и меньше желающих помочь и дольше время возврата в итоге к истокам проблемы, которое будет необходимо и без помощи, при решении собственными силами...(О как закрутил...

Siend 08.12.2014 16:33

Ну вообще вот такая лажа случилась. грубо говоря:

var a = new testA()

//где-то в testA
this.b = new testB()

//где-то в testB
this.parrent = a


------------------------
Далее, в testA есть функция, которая вызывается из testB

где-то в testA
this.b.SetFunction(this.testAfunction )
testAfunction : function() {.../*Вот тут мне нужен в качестве this объект a*/...}


где-то в testB
SetFunction: function (func){
        this.TEST = func
    }
testBfunction : funtion(){
this.TEST() //Вот тут this - это объект b и когда вызывается функция, у нее this тоже от объекта b. 
}


Для решения этой проблемы я и сделал b.parrent = a
И когда я вызываю testAfunction() ---> this.parrent в ней действительно ссылается на a, НО!!! я не могу обратиться к методам a. т.е. допустим к какой-нибудь функции объекта a:

где-то в testA
SuperFunction: function() {alert("yes")}

testAfunction : function() {
this.parrent.SuperFunction() //ошибка
}

Siend 08.12.2014 16:38

ВРУ. Этот момент работает, кажется ошибка в чем-то другом(

Deff 08.12.2014 16:49

Цитата:

Сообщение от Siend (Сообщение 345508)
НО!!! я не могу обратиться к методам a. т.е.
}[/JS]

http://javascript.ru/tutorial/object...steyshiy-vyzov
http://learn.javascript.ru/prototype...о-f-prototype


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