es6 getter setter

https://stackoverflow.com/questions/34517538/setting-an-es6-class-getter-to-enumerable

1. 我要 getter 没有要暴露

class A {
    get age() {
        return 11;
    }
}

console.log(Object.keys(new A())); // []

翻译 es5

var A = /** @class */ (function () {
    function A() {
    }
    Object.defineProperty(A.prototype, "age", {
        get: function () {
            return 11;
        },
        enumerable: true,
        configurable: true
    });
    return A;
}());
console.log(Object.keys(new A())); // []

由于定义到了 prototype 上,所以 object keys 就找不到了。

2. 我要 getter 要暴露

class A {
    constructor() {
        Object.defineProperty(this, ‘age‘, {
            get: function () {
                return 11;
            },
            enumerable: true
        })
    }
    readonly age: number; // 为了智能提示
}

console.log(Object.keys(new A())); // []

直接定义到了对象上边而不是 prototype

3. 我要 getter setter 不要暴露全部

by default 是会出现 private _age 的

class A {
    private _age: number;

    get age() {
        return this._age;
    }
    set age(value: number) {
        this._age = value;
    }
}
const a = new A();
a.age = 11
console.log(Object.keys(a)); // [‘_age‘]

添加 define

class A {
    constructor() {
        Object.defineProperty(this, ‘_age‘, {
            enumerable: false,
            writable: true
        });
    }
    private _age: number;

    get age() {
        return this._age;
    }
    set age(value: number) {
        this._age = value;
    }
}

const a = new A();
a.age = 15;
console.log(Object.keys(a));
console.log(a.age);

4. 我要 getter setter 暴露但不要暴露 private

class A {
    constructor() {
        Object.defineProperty(this, ‘_age‘, {
            enumerable: false,
            writable: true
        });

        Object.defineProperty(this, ‘age‘, {
            enumerable: true,
            get: function () {
                return this._age;
            },
            set: function (value: number) {
                this._age = value;
            }
        });

    }
    private _age: number;
    age: number;
}

const a = new A();
a.age = 15;
console.log(Object.keys(a));
console.log(a.age);

原文地址:https://www.cnblogs.com/keatkeat/p/10885277.html

时间: 2024-10-18 06:24:02

es6 getter setter的相关文章

10.getter & setter

自定义 Person 类 class Person: NSObject { var name: String? var age: Int? } getter & setter var _name: String? var name: String? { get { return _name } set { _name = newValue } } 在 Swift 中以上形式的 getter & setter 很少用 didSet 在 OC 中,我们通常希望在给某一个变量赋值之后,去做一些额

Lombok(1.14.8) - @Getter, @Setter, @ToString, @EqualsAndHashCode & @Data

@Getter / @Setter @Getter 和 @Setter,分别实现了 Gette r和 Setter 方法. package com.huey.hello.bean; import java.util.Date; import lombok.Getter; import lombok.Setter; public class Student { @Getter @Setter private int studNo; @Getter @Setter private String st

iOS getter setter

getter setter 给成员变量起名字用的 setter方法 设置成员变量值 1. setter 方法一定是对象方法 不可能是类方法 2.一定没有返回值 3. 以set开头,并且set后面跟上需要设置的成员白能量的名称去掉下划线,并且首字母大写 4. 一定有参数 参数类型一定要和成员变量的类型一直 参数名称就是成员变量名称去掉下划线 getter方法用于返回成员变量的值 1. getter 一定是对象方法 2. 一定有返回值 返回值一定和获取的成员变量类型一致 3. 方法名称就是获取的成员

Java程序员的JavaScript学习笔记(4——闭包/getter/setter)

计划按如下顺序完成这篇笔记: 理念. 属性复制和继承. this/call/apply. 闭包/getter/setter. prototype. 面向对象模拟. jQuery基本机制. jQuery选择器. jQuery工具方法. jQuery-在"类"层面扩展. jQuery-在"对象"层面扩展. jQuery-扩展选择器. jQuery UI. 扩展jQuery UI. 这是笔记的第4篇,聊聊闭包/getter/setter,看看JavaScript中的变量作

lombok注解为java类生成Getter/Setter方法

1. 先到lombok官网下载lombok.jar包 : http://projectlombok.org/ 2. 下载了之后的两种安装方法: 1. 双击下载下来的 JAR 包安装 lombok 我选择这种方式安装的时候提示没有发现任何 IDE,所以我没安装成功,我是手动安装的.如果你想以这种方式安装,请参考官网的视频. 2.eclipse / myeclipse 手动安装 lombok 1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹

Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Ja

idea中Lombok的Buider构造器模式,getter/setter正确使用方法

public class ApiUser implements Serializable { private Long id; /*** * 用户类型:single,org(organization) */ private String type; private String loginName; /*** * 身份证姓名/组织机构名称 */ private String name; /** * 身份证号码/营业执照号码 */ private String idNum; private Str

1-2SPRING-BOOT-JPA添加lombok-管理getter/setter

1.1  lombok 详细使用可以看官网:https://projectlombok.org/features/all 1.2  使用@Data注解,这个注解的作用是: @Data All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor! 1.3

android studio: 快捷键生成getter/setter方法时自动加m的问题

平时使用Android Studio 在写实体类的时候,习惯给实体类的成员变量前面加上一个"m" 修饰符表示这是一个成员变量,这也是搞java的一种约定俗成的写法,本来这是没有问题的,可是在默认情况下使用快捷键生成getter()/setter()方法时,生成的getter()/setter()方法名居然也加了“m” ,成员变量的个数少了也就罢了,自己一个一个手改,成员变量的个数一多,改的人头都大了! 比如我要给一个名为Person的实体类生成getter()/setter()方法 使