use*_*156 8 javascript prototype function object
Object.prototype.doSomething = function(p) {
this.innerHTML = "<em>bar</em>";
this.style.color = "#f00";
alert(p);
};
document.getElementById("foo").doSomething("Hello World");
Run Code Online (Sandbox Code Playgroud)
<div id="foo"><strong>foo</strong></div>
上面的代码工作正常.
但我记得我在某个地方看过这个:Do not mess with native Object.好吧,就像那样.
那么在Object上定义原型函数是否可以?我有什么理由不这样做吗?
添加的唯一安全方法Object.prototype是使用ES5方法Object.defineProperty创建不可枚举的属性:
Object.defineProperty(Object.prototype, 'doSomething', {
value: function(p) { ... },
enumerable: false, // actually the default
});
Run Code Online (Sandbox Code Playgroud)
这可确保您不会出现新属性for (key in object).
请注意,此函数无法可靠地填充,因为在以前版本的ECMAScript/JavaScript中不存在非可枚举属性.
在任何情况下,如果您的方法仅适用于HTML页面元素,您最好将其添加到Element.prototype而不是Object.prototype,尽管旧的(IE)浏览器可能会抱怨如果您这样做.
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |