проблемы с «этим» в ООП JS - PullRequest
       25

проблемы с «этим» в ООП JS

0 голосов
/ 26 февраля 2012

Я создаю игру и использую Prototype JS Framework для легкой работы с объектами. Я создал свои собственные методы для событий не DOM среди моих собственных объектов.

StageObject является дочерним объектом объекта Screen, и его метод load () загружает изображение объекта и, как только он загружается, запускает событие. Вот оно:

var StageObject = Class.create(Screen, {...}) 

StageObject.addMethods({
    /*.....*/
    load:function(){
        this.img = new Image();
        this.img.src = "./src/img/"+this.src;        
        this.img.onload = this.objectLoadedHandler();                           
    }, 
}) 

objectLoadedHandler принадлежит StageObject. Вызывает другое событие, , который находится в объекте Screen, а не в StageObject . Проблема в том, что внутри этого второго обработчика this не указывает на текущий объект (Screen). Я не понял, на что это указывает, но я не могу достичь того уровня свойств объекта Screen, который мне нужен для дальнейших вычислений. Пожалуйста, дайте мне совет об этом.

Ответы [ 2 ]

1 голос
/ 26 февраля 2012
this.img.onload = this.objectLoadedHandler.bind(this);     
0 голосов
/ 26 февраля 2012

Полагаю, проблема в том, что вы заполняете слишком много объектно-ориентированного кода в своем коде.Если вы используете this в каждой второй строке кода, вы неизбежно столкнетесь с ситуацией, когда вы не сможете понять последствия.Я не уверен, стоит ли мне приписывать это тому, что вы не знаете Prototype или что в коде в вашем посте отсутствуют некоторые важные части для понимания, но я тоже не знаю, что не так.простое решение этой проблемы не решит более общую проблему, заключающуюся в том, что вы пишете код, слишком сложный для вашего понимания.Также смотрите: https://stackoverflow.com/questions/1103299/help-me-understand-this-brian-kernighan-quote

В JavaScript this - это довольно опасный инструмент, некоторые люди используют его для довольно простых вещей, а иногда это работает нормально.Но когда вы передаете функции как параметры других функций и т. Д., Становится все труднее понять, что означает this в любом данном контексте.Лично я почти никогда не использую this в своем коде и почти никогда не прикрепляю функции к объектам.Есть некоторые сложные проблемы, когда тяжелый ОО-стиль полезен, но в большинстве случаев я бы сказал, что он приносит больше вреда, чем пользы.

...