2013-01-10 11 views
7
appendChild = function(message) { 
    console.log("intercepted!"); 
} 

उपरोक्त कोड का उपयोग करने से काम नहीं लगता है।मैं appendChild() को ओवरराइड कैसे करूं?

कोई भी जानता है?

+0

+1 ग्रेट प्रश्न; मैंने कुछ नया सीखा। – Plynx

+0

क्योंकि मैं बुकमार्लेट के बारे में मास्टर थीसिस के बारे में लिख रहा हूं, अब मुझे इसकी कमजोरियों का वर्णन करने की आवश्यकता है और कैसे रूज इसका फायदा उठा सकते हैं। – RedHotScalability

उत्तर

13

आप जो बदलना चाहते हैं वह Element.prototype.appendChild है लेकिन यह शायद एक बुरा विचार है।

यह उदाहरण डाला तत्व में पाठ intercepted जोड़ता है:

var f = Element.prototype.appendChild; 
Element.prototype.appendChild = function(){f.apply(this, arguments);arguments[0].innerHTML="!Intercepted!"; }; 
document.body.appendChild(document.createElement("div")); 

Demonstration

+0

धन्यवाद, मैं 8 मिनट में आपका उत्तर स्वीकार करूंगा। – RedHotScalability

2

यह बीमार देशी कार्यों अधिलेखित करने के लिए सलाह दी जाती है, लेकिन अगर आप से यह कर सुनिश्चित करें कि आप के रूप में संलग्न तत्व लौट कर देशी "appendChild" फ़ंक्शन के लौटे हुए मूल्य का उपयोग करने वाले कोड के साथ समस्याओं को रोकने के लिए अच्छी तरह से:

window.callbackFunc = function(elem, args) { 
    // write some logic here 
} 
window.f = Element.prototype.appendChild; 
Element.prototype.appendChild = function() { 
    window.callbackFunc.call(this, arguments); 
    return window.f.apply(this, arguments); 
}; 
संबंधित मुद्दे