Javascript 在自定义元素构造函数调用中维护JS作用域

Javascript 在自定义元素构造函数调用中维护JS作用域,javascript,scope,web-component,custom-element,Javascript,Scope,Web Component,Custom Element,我正在试验一种新的模式, 其中每个新创建的卡元素 使用构造函数作用域存储私有变量: 伪代码: 因此: 我有很多能手和二传手 用这个将数据粘贴到我的元素上。whatever=value感觉有点奇怪 我可以扩展到: class CardtsCard extends HTMLElement { constructor(){ let private = new Map(); Object.assign(this,{ setPrivate : (d

我正在试验一种新的模式, 其中每个新创建的卡元素 使用构造函数作用域存储私有变量:

伪代码:

因此:

我有很多能手和二传手 用这个将数据粘贴到我的元素上。whatever=value感觉有点奇怪

我可以扩展到:

class CardtsCard extends HTMLElement {
    constructor(){
       let private = new Map();
       Object.assign(this,{
          setPrivate : (data,value) => private.set(data,value),
          getPrivate : (data) => private.get(data)
       });
    }
}

问题:我不是JS范围专家,有缺点吗?

在第一个示例中,每当调用构造函数时,都必须创建包含这些私有变量的闭包。对于一些不会造成任何开销的元素,但对于许多元素,您可能会看到性能和内存开销

关于第二个示例:映射查找不能内联,属性查找可以内联,因此它们的性能更高,您只会在许多操作中注意到


通过这种设置,您有什么好处?一个公共方法getPrivate实际上不是私有的,不是吗?如果您需要私有变量,请以某种方式将它们标记为私有变量,并相信所有使用代码的人都能适当地处理它。

实际上,与对象相比,使用私有闭包变量时,有时没有性能开销,但性能有所提高variable@supersharp我想看看一个测试用例,它是真的。那么一个范围就是一个范围?IIFE中的映射与构造函数中的映射相同??是否有指向映射和内联的指针??第一次谷歌搜索让我学到了更多技术性的Java东西,四分之一世纪以来我拒绝学习这些东西ago@danny毕竟,构造函数只是一个函数,一个特殊的函数。如果您查找隐藏类V8,您将发现更多与JS相关的优化。或者只是Tnx Jonas,这是我的家庭作业:
 el.getPrivate(); // outputs 666
 el.private;      // outputs 42
class CardtsCard extends HTMLElement {
    constructor(){
       let private = new Map();
       Object.assign(this,{
          setPrivate : (data,value) => private.set(data,value),
          getPrivate : (data) => private.get(data)
       });
    }
}