当前位置:  开发笔记 > 编程语言 > 正文

如何在ES6中使用私有变量?

如何解决《如何在ES6中使用私有变量?》经验,为你挑选了1个好方法。

在ES5中,您可以使用私有和公共变量模拟一个类,如下所示:

car.js

function Car() {
    // using var causes speed to be only available inside Car (private)
    var speed = 10;

    // public variable - still accessible outside Car
    this.model = "Batmobile";

    // public method
    this.init = function(){

    }
}

但是在ES6中,你不能再在构造函数之外声明变量,这使得实际上更难以以OOP方式使用类!

您可以使用此方法在构造函数中声明变量,但这会使它们默认公开.这非常奇怪,因为ES6 DOES有一个get/set关键字!

class Vehicle {
    constructor(make, year) {
        // the underscore is nice, but these are still public!
        this._make = make;
        this._year = year;
    }

    // get and set can be handy, but would make more sense
    // if _make and _year were not accessible any other way!
    get make() {
        return this._make;
    }

    get year() {
        return this._year;
    }
}

halfzebra.. 6

ES6标准没有提供一种定义私有变量的新方法.

事实上,新的ES6 只是围绕常规基于原型的构造函数的语法糖.

getset关键字提供了一种简化ES5自定义getter和setter定义的方法,这些getter和setter之前使用Object.defineProperty()的描述符定义

您可以做的最好的事情是使用符号或WeakMaps的那些技术

下面的示例使用WeakMap存储私有属性.

// myModule.js
const first_name = new WeakMap();

class myClass {
     constructor (firstName) {
          first_name.set(this, firstName);
     }

     get name() {
          return first_name.get(this);
     }
}

export default myClass;

我指的是David Vujic撰写的文章么?等待.真?不好了!(关于ES6课程和隐私的帖子)与使用WeakMaps的想法.



1> halfzebra..:

ES6标准没有提供一种定义私有变量的新方法.

事实上,新的ES6 只是围绕常规基于原型的构造函数的语法糖.

getset关键字提供了一种简化ES5自定义getter和setter定义的方法,这些getter和setter之前使用Object.defineProperty()的描述符定义

您可以做的最好的事情是使用符号或WeakMaps的那些技术

下面的示例使用WeakMap存储私有属性.

// myModule.js
const first_name = new WeakMap();

class myClass {
     constructor (firstName) {
          first_name.set(this, firstName);
     }

     get name() {
          return first_name.get(this);
     }
}

export default myClass;

我指的是David Vujic撰写的文章么?等待.真?不好了!(关于ES6课程和隐私的帖子)与使用WeakMaps的想法.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有