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

改进机能的最好要领:JavaScript耽误执行属性

发布时间:2021-05-17 22:32:20 所属栏目:编程 来源:互联网
导读:按需属性模式 优化执行计较操纵的最简朴要领是比及必要数据后再举办计较。 譬喻,您可以行使带有getter的data属性来按需举办计较,如下所示: classMyClass{ get
副问题[/!--empirenews.page--]

优化执行计较操纵的最简朴要领是比及必要数据后再举办计较。

譬喻,您可以行使带有getter的data属性来按需举办计较,如下所示:

class MyClass { 

    get data() { 

        return someExpensiveComputation(); 

    } 

在这种环境下,直到有人第一次读取该data属性时,您的昂贵的计较操纵才产生,这是一种改造。

可是,也是存在题目的,每次data读取属性时城市执行沟通的昂贵计较操纵,这比之前的示例(个中至少仅执行一次计较)差。

凭证我们说明的环境来看,这不是一个好的办理方案,以是可以在此基本上建设一个更好的办理方案。

耽误加载属性模式

只有在会见该属性时才执行计较是一个好的开始。您真正必要的是在那之后缓存信息,然后仅行使该缓存的数据功效。

可是,有个题目必要我们思量,您将这些信息缓存在那里以便于会见呢?

最简朴的要领是界说一个具有沟通名称的属性,并将其值配置为计较出的数据,如下所示:

class MyClass { 

    get data() { 

        const actualData = someExpensiveComputation(); 

        Object.defineProperty(this, "data", { 

            value: actualData, 

            writable: false, 

            configurable: false, 

            enumerable: false 

        }); 

        return actualData; 

    } 

在这里,该data属性再次被界说为该类的getter,可是这一次它将缓存功效。

挪用Object.defineProperty()建设一个名为的新属性data,该属性的牢靠值为actualData,而且被配置为不行写,不行设置和可列举。

下次data会见该属性时,它将重新建设的属性中读取而不是挪用getter:

const object = new MyClass(); 

// calls the getter 

const data1 = object.data; 

// reads from the data property 

const data2 = object.data; 

现实上,全部计较仅在第一次读取数据属性时完成。数据属性的每次后续读取都将返回缓存的版本。这种模式的弱点是data属性开始时是不行列举的原型属性,最后是不行列举的本身的属性:

const object = new MyClass(); 

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

const data = object.data; 

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

尽量这种区别在很多环境下并不重要,但相识这种模式很重要,由于在转达工具时,这种模式也许会引起渺小的题目。

荣幸的是,我们可以行使接下来的模式很轻易办理这个题目。

类的耽误加载属性

假如您有一个实例,对付这个实例,耽误加载属性存在很重要,那么您可以行使Object.defineProperty()在类结构函数内部建设该属性。

它比前面的示例有点紊乱,可是它将确保该属性仅存在于实例上。这是一个例子:

class MyClass { 

    constructor() { 

        Object.defineProperty(this, "data", { 

            get() { 

                const actualData = someExpensiveComputation(); 

                Object.defineProperty(this, "data", { 

                    value: actualData, 

                    writable: false, 

                    configurable: false 

                }); 

                return actualData; 

            }, 

            configurable: true, 

            enumerable: true 

        }); 

    } 

我们从这个例子中可以发明,结构函数行使建设data会见器属性Object.defineProperty()。该属性是在实例上建设的(行使this),界说了一个getter并指定了可列举和可设置的属性。

将data属性配置为可设置尤其重要,这样您可以Object.defineProperty()再次挪用它。

(编辑:湖南网)

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

热点阅读