gpt4 book ai didi

javascript - 哪里可以找到 V8 DOM 方法实现(document.createElement())的 "javascript"源代码?

转载 作者:行者123 更新时间:2023-11-28 02:25:45 25 4
gpt4 key购买 nike

我需要重写 document.createElement() 方法,并且我正在网上寻找 javascript 源代码以获得一些想法。我搜索了http://code.google.com/p/v8/source/browse但似乎搜索返回来自所有 svn 源(甚至不相关的库)的结果,这使得它变得困惑。我浏览了svn中的代码,当然有C++源代码,但显然没有javascript实现。

最佳答案

您不应该而且通常不能重写 native DOM 方法。 createElement 等方法“接近表面”客户端的 EMACscript 实现,具有 protected 范围,并且根本无法由“用户层”脚本重现。

对于createElement,您可以在某些浏览器中覆盖document对象的createElement函数(见下文) ,但您也会很快发现它在某些现有客户端/版本上崩溃并烧毁。此外,您无法更改 document 的原型(prototype),因为它没有原型(prototype)。

但是,您可以轻松且无风险地创建一个小型包装函数:

var createElement = function (ele_type, attrs) {
var ele = document.createElement(ele_type);
if (!ele)
return false;

for (var idx in attrs) {
if ((idx == 'styles' || idx == 'style') && typeof attrs[idx] == 'object') {
for (var prop in attrs[idx]){ele.style[prop] = attrs[idx][prop]}
} else if (idx == 'html') {
ele.innerHTML = attrs[idx]
} else {
ele.setAttribute(idx, attrs[idx]);
}
}

// now fire any custom events or do whatever you needed to do

};

var myNewDiv = createElement ('div', {'id':'myNewDiv', 'styles':{'color':'red'}});

这使您有机会在创建新元素时实现自定义代码。无论实现差异如何,它都适用于所有浏览器,并且与您今天编写的任何其他代码一样面向 future 。

上面提到的另一条路线是覆盖事件 document 实例的 createElement 函数,它不是跨浏览器的,也不能保证明天就能工作。这种方法的问题在于文档对象不是由规范定义的——它是特定于实现的。 今天,Firefox(例如)将允许您覆盖此函数,但情况可能会发生变化,恕不另行通知。

document.createElement = function(originalDocumentCreate) {
return function() {
var ele = originalDocumentCreate.apply(this, arguments);

// now fire any custom events or do whatever you needed to do

return ele;
};
}(document.createElement);

另请参阅:https://stackoverflow.com/a/11727842/610573 (代码概念归功于 Esailija)

关于javascript - 哪里可以找到 V8 DOM 方法实现(document.createElement())的 "javascript"源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com