جافا سكريبت:كيفية جعل التحكم بإرسال نفسها في طريقة

StackOverflow https://stackoverflow.com/questions/619514

  •  03-07-2019
  •  | 
  •  

سؤال

<a href="" id="someId" onclick="SomeMethod(self);"></a>

حيث SomeMethod يمكن أن يكون:

function SomeMethod(item)
{
  item.setAttribute('name', item.id);
}

بدلا من:

function SomeMethod(itemId)
{
  var someItem;

  someItem = document.getElementById(itemId);
  someItem .setAttribute('name', someItem .id);

}

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

اعتقدت أنه كان على النفس ، ولكن النفس لا يبدو أن يكون ما أريد عندما النصي لدي يعمل.

هل كانت مفيدة؟

المحلول

استخدم الكلمات الرئيسية this.

<a href="" id="someId" onclick="SomeMethod(this);"></a>

نصائح أخرى

كنت في الواقع لا تحتاج إلى تمرير هذا كحجة على وظيفة الخاص بك لأن كنت قد حصلت على انقر فوق كائن الحدث التي يمكنك الوصول إليها.لذلك:

<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {

    if (!event) {
        event = window.event; // Older versions of IE use 
                              // a global reference 
                              // and not an argument.
    };

    var el = (event.target || event.srcElement); // DOM uses 'target';
                                                 // older versions of 
                                                 // IE use 'srcElement'
    el.setAttribute('name', el.id);

}
</script>

وأنا أميل إلى استخدام هذا النهج في كل وظيفة وتدعو من HTML الخصائص التالية: -

onclick="SomeMethod.call(this)"

وبعد ذلك في جافا سكريبت القيام به: -

function SomeMethod()
{
   this.setAttribute('name', this.id);
}

وهذا له ميزة واضحة عند تنتدب أيضا مباشرة إلى خصائص معالج الأحداث في التعليمات البرمجية جافا سكريبت: -

document.getElementById("someID").onclick = SomeMethod

إذا أخذت SomeMethod العنصر السياق كمعلمة أنه سيكون محرجا جدا لاقامة: -

function(id) {
   var elem = document.getElementById(id)
   elem.onclick = function() { SomeMethod(elem); }
}("someID");

والأسوأ من ذلك أن هذا سيكون الذاكرة إغلاق تسرب.

وعند هذه النقطة: SomeMethod(this) - this الكائن عوائد النافذة حتى لا يستخدمونه. الطريقة الصحيحة لاستخدام this الكلمة يجعل من سياق ذات الصلة، وذلك باستخدام SomeMethod.call(this).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top