обрашение к обьекту (this)
есть обьект
obj = { method1 : function () { //***** } method2 : function () { this.method1(); } } в мотоде 2 вызываем метод 1 через зис, а как в другом случаии вызвать метод родителя, не прибегая к его имени? parent = { method1 : function () { //***** } child : { method1 : function () { Родитель.method1(); // как вызвать метод 1 родителя?? parent.method1(); // вот такой вариант не годится } } } |
Используй метод bind (он не кроссбраузерный, но легко эмулируется):
child.method1 = parent.method1.bind( parent ); |
похожий вопрос.
как в цепочке a.b.c, имея на руках с выйти на b? Наверно, что никак, не? |
PashPP, никак. С другой стороны объект c не волшебным же образом попадает в b. Значит в какой-то момент есть ссылка на b, и ее можно добавить в с.
|
Используй функцию Class )))))))))))))))))))))))))))))))))))))))))))))))
ахаххахаахаха http://javascript.ru/forum/misc/3215...y-i-cikly.html |
Maxmaxmахimus, когда уже статью-то запилишь? :)
|
ДА ЗДРАВСТВУЙ КОВНОКОД :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: |
DimaJS, ошибку пишет
|
Hekumok,
где? p.s. какой браузер? |
а, это я со смарта сидел (через оперу мобайл), с компа всё норм :) вот какая ошибка была - error: Security error: attempted to read protected variable: child
|
Hekumok,
ясн, всё таки хорошие вещи эти ссылки, ну прям очень хорошие:D |
Цитата:
укажите на мою ошибку я попытаюсь исправиться |
czp,
я про свой:D |
Цитата:
|
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. в общем то что не надо прибегать к имени объекта больше одного раза ;) |
Dim@, а! Всё понял :)
я слоу))) |
Hekumok,
а ты скока уже учишься JS - мне просто интересно, ведь мы оба школьники :D :lol: |
Dim@, да я уж и не помню, когда начал...просто было время, ну где-то месяц, когда у меня не было времени (тафтология))) на изучение js, а сейчас вот опять продолжаю :)
А так да :D |
Hekumok,
ясно, я около 4 месяцев изучаю, хотя начал полгода назад :) |
Dim@, понятненько :)
|
Hekumok,
едрить csp - тоже школьник :lol: :D |
Dim@, школьники заполонили этот форум :D :lol:
|
Часовой пояс GMT +3, время: 09:43. |