2013-02-14 20 views
6

JS Fiddle here var, e.target yerine yeni bir nesneye klonlamadan yerini alabilir misin?Bir JavaScript Etkinliğinde e.target'i Değiştir/Geçersiz Kıl/Üzerine Yaz

Bu kemanın dinleyicileri aşağıda tekrarlanır;

one.addEventListener('click', function(e) { 
    // default behaviour, don't modify the event at all 
    logTarget(e); 
}); 

two.addEventListener('click', function(e) { 
    // replace the value on the same object, which seems to be read-only 
    e.target = document.createElement('p'); 
    logTarget(e); 
}); 

three.addEventListener('click', function(e) { 
    function F(target) { 
    // set another property of the same name on an instance object 
    // which sits in front of our event 
    this.target = target; 
    } 
    // put the original object behind it on the prototype 
    F.prototype = e; 
    logTarget(new F(document.createElement('p'))); 
}); 

four.addEventListener('click', function(e) { 
    // create a new object with the event behind it on the prototype and 
    // our new value on the instance 
    logTarget(Object.create(e, { 
    target: document.createElement('p') 
    })); 
}); 

cevap

4

Dediğin gibi ben event.target salt okunur, senin keman (http://jsfiddle.net/8AQM9/33/) güncelledik ama Object.create ile mülkiyet tanımlayıcısı üzerine yazabilirsiniz.

Doğru yolda olduğumuzu ama bir özellik açıklamadır nasıl at MDN görebilirsiniz Object.create sadece key: value hashmap Recive vermez, bu key: property-descriptor recives.

Ben

Object.create(e, { 
    target: { 
     value: document.createElement('p') 
    } 
}); 

ile

Object.create(e, { 
    target: document.createElement('p') 
}); 

yerini ettik Ve bu e prototipini ve yeni nesnenin target özelliğini değiştirir.

+0

Harika iş, teşekkür ederim! –

+1

Chrome 51'te çalışmaz. Yeni olay nesnesinin hedefi hariç tüm özellikler "[Özel Durum: TypeError: MouseEvent.remoteFunction öğesinde geçersiz çağrı] (: 3: 14)]' –

İlgili konular