Почему функция не распознает элемент при использовании «this»

#javascript

#javascript

Вопрос:

У меня есть класс под названием imageResizing. У нее есть элемент, MAX_WIDTH_ORIGINAL_IMG который определяется как 650:

 MAX_WIDTH_ORIGINAL_IMG:650,
  

и вызывается функция setMaxSizeOriginalImg , и единственное, что она делает, это предупреждает участника MAX_WIDTH_ORIGINAL_IMG :

 alert(this.MAX_WIDTH_ORIGINAL_IMG);
  

Я вызываю функцию при загрузке следующим образом:

  addEventSimple(window,'load',imageResizing.setMaxSizeOriginalImg);
  

И в окне предупреждения написано undefined .

Однако, когда я меняю предупреждение на alert(imageResizing.MAX_WIDTH_ORIGINAL_IMG); , в окне предупреждения отображается 650.

Вот весь код моей HTML-страницы:

 <html>
<head></head>
    <body>
        <script>
        if (typeof(addEventSimple)=='undefined') {
                                addEventSimple = function(obj,evt,fn) {
                                    if (obj.addEventListener)
                                        obj.addEventListener(evt,fn,false);
                                    else if (obj.attachEvent)
                                        obj.attachEvent('on' evt,fn);
                                }
                    }   


         var imageResizing={

                MAX_WIDTH_ORIGINAL_IMG:650,

                setMaxSizeOriginalImg:function()
                {
                    alert(imageResizing.MAX_WIDTH_ORIGINAL_IMG);

                }
            };


            addEventSimple(window,'load',imageResizing.setMaxSizeOriginalImg);
    </script>
</body>
</html>
  

Я хотел бы понять, в чем разница между использованием this и фактическим именем класса, когда функция находится в самом классе

Ответ №1:

Если вы вызываете, foo.bar() то this это foo .

Вы передаете значение foo.bar . Это несколько похоже на:

 baz = foo.bar;
  

Итак, когда он вызывается, это немного похоже baz() .

Передайте вместо этого новую функцию:

 addEventSimple(window,'load',function () { imageResizing.setMaxSizeOriginalImg() });