1

我想为每个 DOM 元素添加一些函数,但我不想遍历所有元素。这是一个演示代码:

window.onload = function () {
    /* get the constructor of document, which is Document
       add the clickMe function to the prototype */
    document.constructor.prototype.clickMe = function (func) {
        this.addEventListener('click', function () {
            func();
        });
    };
    document.clickMe(clickDocument); // works

    /* doesn't work, because the prototype of document.getElementById('random_btn')
       does not have the function clickMe (makes sense) */
    document.getElementById('random_btn').clickMe(clickRandomBtn);
}

function clickDocument() {
    alert("clicked documet");
}

function clickRandomBtn() {
    alert("clicked a random button");
}
4

1 回答 1

3

如果我理解你的问题,你想要这个:

Element.prototype.clickMe = function (func) {
    this.addEventListener('click', function () {
        func();
    });
};

示范

但是更改原生对象的原型通常被视为一种不好的做法。请参阅可维护的 JavaScript:不要修改不属于您的对象

于 2013-10-09T11:38:21.527 回答