Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   обрашение к обьекту (this) (https://javascript.ru/forum/misc/32371-obrashenie-k-obektu.html)

czp 13.10.2012 23:48

обрашение к обьекту (this)
 
есть обьект
obj = {
  method1 : function () {
    //*****
  }

  method2 : function () {
     this.method1();
  }
}

в мотоде 2 вызываем метод 1 через зис, а как в другом случаии вызвать метод родителя, не прибегая к его имени?
parent = {
  method1 : function () {
    //*****
  }

  child : {
     method1 : function () {
       Родитель.method1(); // как вызвать метод 1 родителя??
       parent.method1(); // вот такой вариант не годится
     }
  }
}

BallsShaped 14.10.2012 00:44

Используй метод bind (он не кроссбраузерный, но легко эмулируется):
child.method1 = parent.method1.bind( parent );

PashPP 14.10.2012 01:31

похожий вопрос.

как в цепочке a.b.c, имея на руках с выйти на b?
Наверно, что никак, не?

BallsShaped 14.10.2012 02:16

PashPP, никак. С другой стороны объект c не волшебным же образом попадает в b. Значит в какой-то момент есть ссылка на b, и ее можно добавить в с.

Maxmaxmахimus 14.10.2012 03:26

Используй функцию Class )))))))))))))))))))))))))))))))))))))))))))))))
ахаххахаахаха

http://javascript.ru/forum/misc/3215...y-i-cikly.html

Hekumok 14.10.2012 09:00

Maxmaxmахimus, когда уже статью-то запилишь? :)

DimaJS 14.10.2012 21:54

ДА ЗДРАВСТВУЙ КОВНОКОД :D :D :lol: :lol: :D
простой вариант без указания имени
((self = parent = {
  method1 : function () {
    alert('parent');
  },
 
  child : {
     method1 : function () {
       this.parent.method1(); // как вызвать метод 1 родителя??
       parent.method1(); // вот такой вариант не годится
     }
  }
}).child.parent = self), self = window;
parent.child.method1();
alert(self);

P.S. код можно улучшить:victory:

Hekumok 15.10.2012 11:39

DimaJS, ошибку пишет

DimaJS 15.10.2012 19:56

Hekumok,
где?
p.s. какой браузер?

Hekumok 15.10.2012 20:21

а, это я со смарта сидел (через оперу мобайл), с компа всё норм :) вот какая ошибка была - error: Security error: attempted to read protected variable: child

DimaJS 15.10.2012 20:36

Hekumok,
ясн, всё таки хорошие вещи эти ссылки, ну прям очень хорошие:D

czp 15.10.2012 20:45

Цитата:

ДА ЗДРАВСТВУЙ КОВНОКОД
а че ковнокод?
укажите на мою ошибку я попытаюсь исправиться

Dim@ 15.10.2012 22:18

czp,
я про свой:D

Hekumok 15.10.2012 22:50

Цитата:

Сообщение от DimaJS
Hekumok,
ясн, всё таки хорошие вещи эти ссылки, ну прям очень хорошие:D

Ээмм...это ты о чем? Оо:blink:

Dim@ 15.10.2012 23:06

Hekumok,
гляди пояснения ;) :
((self /*self - левая (отбрасываемая) переменная, ссылающаяся на parent (ссылка)*/ = parent/*parent - это собсно
 наш объект*/ = {
  method1 : function () {
    alert('я method1 объекта parent');
  },
  
  child : {
     method1 : function () {
       this.parent.method1(); // опа рабоает
       parent.method1(); // здесь тоже работает
     }
  }
}).child.parent = self/*в self мы сохранили ссылку на
parent, то есть устанавливаем parent.child.parent = self, что
идентично parent.child.parent = parent, и так как self === parent
прибегать к имени объекта нам не надо (что и требуется)*/), self = window;/*все, переменная self теперь уже не нужна и мы возвращаем её на место - по умолчанию self === window*/
parent.child.method1();//работает
alert(self);//[window object]

P.S. в общем то что не надо прибегать к имени объекта больше одного раза ;)

Hekumok 15.10.2012 23:13

Dim@, а! Всё понял :)
я слоу)))

Dim@ 15.10.2012 23:17

Hekumok,
а ты скока уже учишься JS - мне просто интересно, ведь мы оба школьники :D :lol:

Hekumok 15.10.2012 23:24

Dim@, да я уж и не помню, когда начал...просто было время, ну где-то месяц, когда у меня не было времени (тафтология))) на изучение js, а сейчас вот опять продолжаю :)
А так да :D

Dim@ 15.10.2012 23:26

Hekumok,
ясно, я около 4 месяцев изучаю, хотя начал полгода назад :)

Hekumok 15.10.2012 23:32

Dim@, понятненько :)

Dim@ 15.10.2012 23:36

Hekumok,
едрить csp - тоже школьник :lol: :D

Hekumok 15.10.2012 23:38

Dim@, школьники заполонили этот форум :D :lol:


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