Last active
August 29, 2015 14:04
-
-
Save ajaxsys/1fa6a0554bb8e64bdcd5 to your computer and use it in GitHub Desktop.
javascript-override-element-native-function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // From http://webreflection.blogspot.jp/2007/02/could-i-extend-native-function.html | |
| // Basic example | |
| document.createElement = (function(createElement, Element) { | |
| return function(nodeName) { | |
| var element, key; | |
| try { | |
| element = createElement(nodeName) | |
| } catch (e) { | |
| element = createElement.call(document, nodeName) | |
| }; | |
| for (key in Element) | |
| element[key] = Element[key]; | |
| return element; | |
| } | |
| })(document.createElement, {}); | |
| // An Example: | |
| // redefine document.createElement native function | |
| // using anonymous function | |
| document.createElement = ( | |
| function( | |
| // original document.createElementFunction | |
| createElement, | |
| // object used to extend created elements | |
| Element | |
| ) { | |
| // new document.createElement function | |
| return function( | |
| // type of element (div, p, link, style ... ) | |
| nodeName | |
| ) { | |
| // element and key to loop over object | |
| var element, key; | |
| // IE like this | |
| try { | |
| element = createElement(nodeName) | |
| } | |
| // FireFox like that | |
| catch (e) { | |
| element = createElement.call(document, nodeName) | |
| }; | |
| // loop over Element | |
| for (key in Element) | |
| // and assign each method to new element | |
| element[key] = Element[key]; | |
| // return created element | |
| return element; | |
| } | |
| })( | |
| // send to anonymous, the original function | |
| document.createElement, | |
| // send object used to extend created elements too | |
| { | |
| // read firstChild node | |
| read: function() { | |
| return this.firstChild.nodeValue | |
| }, | |
| // write text into node | |
| write: function(text) { | |
| this.appendChild(document.createTextNode(text)) | |
| } | |
| } | |
| ); | |
| // Usage | |
| onload = function() { | |
| var div = document.createElement("div"); | |
| document.body.appendChild(div); | |
| div.write("Hello World !!!"); | |
| alert(div.read()); // Hello World !!! | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment