覆盖原生功能?

Jam*_*ead 14 javascript dom

本机document.createElement()是愚蠢的(它只需要一个标签名称,没有属性).为什么我不能覆盖它?为什么这不起作用?

var originalFunction = document.createElement;

document.createElement = function(tag, attributes) {
    var element = originalFunction(tag);

    if (attributes) {
        for (var attribute in attributes) {
            element.setAttribute(attribute, attributes[attribute]);
        }
    }

    return element;
};
Run Code Online (Sandbox Code Playgroud)

问题是当您尝试替换本机函数时浏览器会爆炸.由于document它不是JavaScript原语,因此您也无法为其创建原型.WTF.

小智 10

据我所知,问题是document.createElement()即使引用函数也必须来自文档.所以修改你的代码:

var element = originalFunction.call(document, tag);
Run Code Online (Sandbox Code Playgroud)


nic*_*ine 1

据我所知,出于安全原因,您不能覆盖本机方法。对于非本地方法来说完全没有问题。