导航
×
   ❮   
HTML CSS JavaScript PHP Go Sass W3C Colors ECMS

JS 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JS 高级教程

JS 对象 JS 函数 JS 类 JS 迭代 JS Promises JS 模块

JavaScript Accessors 访问器


JavaScript Accessors 访问器(Getter 和 Setter)

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

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


JavaScript Getter(get 关键词)

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

实例

// 创建一个对象:
var person = {
  firstName: "John",
  lastName : "Doe",
  language : "en",
  get lang() {
    return this.language;
  }
};

// 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.lang;
亲自试一试 »

JavaScript Setter(set 关键词)

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

实例

var person = {
    firstName: "John",
  lastName : "Doe",
  language : "",
    set lang(lang) {
    this.language = lang;
    }
};

// 使用 setter 设置对象属性:
person.lang = "en";

// 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.language;
亲自试一试 »

JavaScript 函数还是 Getter?

下面两个例子的区别在哪里?

实例 1

var person = {
    firstName: "John",
    lastName : "Doe",
    fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

// 使用方法显示来自对象的数据:
document.getElementById("demo").innerHTML = person.fullName();
亲自试一试 »

实例 2

var person = {
    firstName: "John",
    lastName : "Doe",
    get fullName() {
      return this.firstName + " " + this.lastName;
  }
};

// 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.fullName;
亲自试一试 »

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

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

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


数据质量

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

在本例中,使用 lang 属性以大写形式返回 language 属性的值:

实例

// 创建一个对象:
var person = {
  firstName: "John",
  lastName : "Doe",
  language : "en",
  get lang() {
    return this.language.toUpperCase();
    }
};

// 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.lang;
亲自试一试 »

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

实例

var person = {
    firstName: "John",
  lastName : "Doe",
    language : "",
  set lang(lang) {
      this.language = lang.toUpperCase();
    }
};

// 使用 setter 设置对象属性:
person.lang = "en";

// 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.language;
亲自试一试 »

为什么使用 Getter 和 Setter?

  • 它提供了更简洁的语法
  • 它允许属性和方法的语法相同
  • 它可以确保更好的数据质量
  • 有利于后台工作

Object.defineProperty()

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;}
});

// Play with the counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
亲自试一试 »

浏览器支持

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

Yes 9.0 Yes Yes Yes

Copyright ©2020-2026 freew3c.com All Rights Reserved 提供的内容仅用于学习和测试,不保证内容的正确性。