繁体   English   中英

无法将 html 元素周围的代理传递给 appendChild

[英]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 行为。 像这样:

  1. 创建内部__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)
        }
      });
  1. 更改全局 appendChild
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM