[英]Cannot pass Proxy around html element to appendChild
我写了一个瘦包装器,它传递了一个由document.createElement
创建的节点并添加了一些方法。 这个包装器是用代理实现的。 我所做的只是捕捉一些吸气剂。
return new Proxy(node, {
get (target, prop) {
if (prop === 'node') return target
if (wFuncs[prop]) {
return Reflect.get(target, wFuncs[prop]).bind(target)
}
return Reflect.get(target, prop)
}
})
我本来希望能够将这样的代理传递给appendChild
,因为它仍然是Node
的一个实例,并且具有来自 html 元素的所有属性和方法。 但是,appendChild 表示传递的元素不是节点:
TypeError:无法在“Node”上执行“appendChild”:参数 1 不是“Node”类型
关于如何解决这个问题的任何想法?
我们可以重新声明全局 appendChild 行为。 像这样:
__element
属性,返回一个真实的节点return new Proxy(node, {
get (target, prop) {
if (prop === 'node') return target
if (prop === '__element') return node
if (wFuncs[prop]) {
return Reflect.get(target, wFuncs[prop]).bind(target)
}
return Reflect.get(target, prop)
}
});
Node.prototype.appendChild = function (el) {
if (el["__element"]) {
return _appendChild.call(this, el["__element"]);
} else {
return _appendChild.call(this, el);
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.