• JavaScript 63 JavaScript 对象 63.5 JavaScript 对象访问器


    JavaScript

    63 JavaScript 对象

    63.5 JavaScript 对象访问器
    63.5.1 JavaScript 访问器(Getter 和 Setter)

    ECMAScript 5 (2009) 引入了 Getter 和 Setter。

    Getter 和 Setter 允许您定义对象访问器(被计算的属性)。

    63.5.2 JavaScript Getter(get 关键词)

    使用 lang 属性来获取 language 属性的值。

    // 创建对象:
    var person = {
      firstName: "Bill",
      lastName : "Gates",
      language : "en",
      get lang() {
        return this.language;
      }
    };
    
    // 使用 getter 来显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.lang;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    63.5.3 JavaScript Setter(set 关键词)

    使用 lang 属性来设置 language 属性的值。

    var person = {
      firstName: "Bill",
      lastName : "Gates",
      language : "",
      set lang(lang) {
        this.language = lang;
      }
    };
    
    // 使用 setter 来设置对象属性:
    person.lang = "en";
    
    // 显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.language;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    63.5.4 JavaScript 函数还是 Getter?
    var person = {
      firstName: "Bill",
      lastName : "Gates",
      fullName : function() {
        return this.firstName + " " + this.lastName;
      }
    };
    
    // 使用方法来显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.fullName();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    var person = {
      firstName: "Bill",
      lastName : "Gates",
      get fullName() {
        return this.firstName + " " + this.lastName;
      }
    };
    
    // 使用 getter 来显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.fullName;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    例子 1 以函数形式访问 fullName:person.fullName()。

    例子 2 以属性形式访问 fullName:person.fullName。

    第二个例子提供了更简洁的语法。

    63.5.5 数据质量

    使用 getter 和 setter 时,JavaScript 可以确保更好的数据质量。

    使用 lang 属性以大写形式返回 language 属性的值:

    // 创建对象:
    var person = {
      firstName: "Bill",
      lastName : "Gates",
      language : "en",
      get lang() {
        return this.language.toUpperCase();
      }
    };
    
    // 使用 getter 来显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.lang;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    使用 lang 属性将大写值存储在 language 属性中:

    var person = {
      firstName: "Bill",
      lastName : "Gates",
      language : "",
      set lang(lang) {
        this.language = lang.toUpperCase();
      }
    };
    
    // 使用 setter 来设置对象属性:
    person.lang = "en";
    
    // 显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.language;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    63.5.6 为什么使用 Getter 和 Setter?
    • 它提供了更简洁的语法
    • 它允许属性和方法的语法相同
    • 它可以确保更好的数据质量
    • 有利于后台工作
    63.5.7 一个计数器实例
    var obj = {
      counter : 0,
      get reset() {
        this.counter = 0;
      },
      get increment() {
        this.counter++;
      },
      get decrement() {
        this.counter--;
      },
      set add(value) {
        this.counter += value;
      },
      set subtract(value) {
        this.counter -= value;
      }
    };
    
    // 操作计数器:
    obj.reset;
    obj.add = 5;
    obj.subtract = 1;
    obj.increment;
    obj.decrement;
    Object.defineProperty()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    Object.defineProperty() 方法也可用于添加 Getter 和 Setter:

    // 定义对象
    var obj = {counter : 0};
    
    // 定义 setters
    Object.defineProperty(obj, "reset", {
      get : function () {this.counter = 0;}
    });
    Object.defineProperty(obj, "increment", {
      get : function () {this.counter++;}
    });
    Object.defineProperty(obj, "decrement", {
      get : function () {this.counter--;}
    });
    Object.defineProperty(obj, "add", {
      set : function (value) {this.counter += value;}
    });
    Object.defineProperty(obj, "subtract", {
      set : function (value) {this.counter -= value;}
    });
    
    // 操作计数器:
    obj.reset;
    obj.add = 5;
    obj.subtract = 1;
    obj.increment;
    obj.decrement;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    63.5.8 浏览器支持

    Internet Explorer 8 或更早的版本不支持 Getter 和 Setter:

    在这里插入图片描述

  • 相关阅读:
    【无标题】
    概率基础——极大似然估计
    gorm的使用(持续更新)
    【Python】基于欧拉角的刚体转动仿真演示
    开源项目自荐:截图工具(小、快、功能丰富)
    Nodejs -- Express的安装和定义get、post方法
    微服务单元测试策略
    LInux驱动开发笔记(十)SPI子系统及其驱动
    MySQL高级-MVCC(超详细整理)
    java ssh 二手车交易管理系统eclipse开发mysql数据库MVC模式java编程网页设计
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127662975