[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;
    }
};

الآن عند إنشاء كائن جديد (بعد تحميل دوم، مع سبان # تيست)

var x = new foo('test');

و "هذا" داخل وظيفة أونكليك يشير إلى اختبار # وليس الكائن فو.

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




لقد كتبت هذا المكون الإضافي ...

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

jquery.callback




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

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

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

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