جافا سكريبت:كيفية جعل التحكم بإرسال نفسها في طريقة
-
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)
.