[Javascript] نطاق استدعاء جافا سكريبت


Answers

this.dom.addEventListener("click", function(event) {
    self.onclick(event)
}, false);
Question

أواجه بعض المشكلات مع جافا سكريبت القديم العادي (بدون إطارات) في الإشارة إلى الكائن في وظيفة رد اتصال.

function foo(id) {
    this.dom = document.getElementById(id);
    this.bar = 5;
    var self = this;
    this.dom.addEventListener("click", self.onclick, false);
}

foo.prototype = {
    onclick : function() {
        this.bar = 7;
    }
};

الآن عندما أقوم بإنشاء كائن جديد (بعد تحميل DOM ، مع اختبار الامتداد)

var x = new foo('test');

يشير "هذا" الموجود داخل الدالة onclick إلى اختبار الامتداد # وليس كائن foo.

كيف يمكنني الحصول على مرجع إلى كائن foo الخاص بي داخل وظيفة onclick؟




كتبت هذا البرنامج المساعد ...

أعتقد أنه سيكون مفيدًا

jquery.callback




التفسير هو أن self.onclick لا يعني ما تعتقد أنه يعني في JavaScript. يعني في الواقع وظيفة onclick في النموذج self الكائن (دون الإشارة إلى self في أي طريقة).

لا تحتوي JavaScript إلا على وظائف وليس على مفوضين مثل C # ، لذلك لا يمكن تمرير طريقة والعنصر الذي يجب تطبيقه على أنه رد اتصال.

الطريقة الوحيدة لاستدعاء طريقة في رد اتصال هي أن تسميها بنفسك داخل وظيفة رد اتصال. نظرًا لأن وظائف JavaScript عبارة عن عمليات إغلاق ، فإنها تكون قادرة على الوصول إلى المتغيرات المُعلنة في النطاق الذي تم إنشاؤه فيه.

var obj = ...;
function callback(){ return obj.method() };
something.bind(callback);



Links