2017-02-21 15 views
0

Я немного новичок в прототипе javascript. У меня возникли проблемы с вызовом метода внутри обработчика событий, он просто говорил «не функция». Может ли кто-нибудь помочь мне указать, что я сделал неправильно. Я ценю за любые комментарии. Спасибо. Вот мой кодметод вызова прототипа javascript в событии «Click»

var oneStepCheckOutEnhance = Class.create(); 
oneStepCheckOutEnhance.prototype = { 
    test: function Test() {  
     alert('test'); 
    }, 

    observeShippingMethod: function() { 
     $$('dl.shipment-methods input').invoke('observe', 'click', function () { 
      this.test(); //Keep saying Uncaught TypeError: this.test is not a function    
     }); 
    },  
}; 

Вот как я назвал:

<script type="text/javascript"> 
    var onStepEnhance = new oneStepCheckOutEnhance(); 
    onStepEnhance.observeShippingMethod(); 
</script> 

ответ

0

this в объеме вы звоните это является первым закрытие функции она попадает (то есть анонимная функция, которая обработки щелчок), а не объект. Вы можете привязать его к родительскому объекту следующим образом:

var oneStepCheckOutEnhance = Class.create(); 
oneStepCheckOutEnhance.prototype = { 
    test: function Test() {  
     alert('test'); 
    }, 

    observeShippingMethod: function() { 
     $$('dl.shipment-methods input').invoke('observe', 'click', function () { 
      this.test();   
     }).bind(this); // right here, it binds the handler to the parent scope. 
    },  
}; 
+0

Ах ... Это сработало. Большое спасибо, это спасло мой день. – Huynh