加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

改善性能的最好方法:JavaScript延迟执行属性

发布时间:2021-05-20 08:17:12 所属栏目:资讯 来源:互联网
导读:副标题#e# 优化执行计算操作的最简单方法是等到需要数据后再进行计算。 例如,您可以使用带有getter的data属性来按需进行计算,如下所示: classMyClass{ getdata(){ returnsomeExpensiveComputation(); } } 在这种情况下,直到有人第一次读取该data属性时

然后,getter函数进行计算并再次调用Object.defineProperty()。对于data来说,将该属性重新定义为具有特定值的数据属性,并且将其变为不可写且不可配置以保护最终数据。下次data读取该属性时,将从存储的值中读取该属性。该data属性现在仅作为自己的属性存在,并且在第一次读取之前和之后都具有相同的作用:

const object = new MyClass(); 

console.log(object.hasOwnProperty("data"));     // true 

 

const data = object.data; 

console.log(object.hasOwnProperty("data"));     // true 

对于类,这很可能是您要使用的模式。另一方面,对象模式下可以使用更简单的方法。

对象的延迟加载属性

如果使用的是对象模式而不是类,则过程要简单得多,因为在对象模式上定义的getter与数据属性一样被定义为可枚举的自身属性(而不是原型属性)。这意味着您可以为类使用延迟加载属性模式,而不会造成混乱:

const object = { 

    get data() { 

        const actualData = someExpensiveComputation(); 

 

        Object.defineProperty(this, "data", { 

            value: actualData, 

            writable: false, 

            configurable: false, 

            enumerable: false 

        }); 

 

        return actualData; 

    } 

}; 

console.log(object.hasOwnProperty("data"));     // true 

const data = object.data; 

console.log(object.hasOwnProperty("data"));     // true 

总结

通过从重新定义为数据属性的访问器属性开始,您可以将计算推迟到第一次读取该属性时,然后将结果缓存起来以备后用。这种方法适用于类和对象文字,并且在对象模式中更简单一些,因为您不必担心getter最终会出现在原型上。

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读