JavaScript Getter 和 Setter

在 JavaScript 中,对象属性有两种类型:

  • 数据属性
  • 访问器属性

数据属性

以下是我们之前教程中使用的“数据属性”示例。

const student = {

    // data property
    firstName: 'Monica';
};

访问器属性

在 JavaScript 中,访问器属性是用于获取或设置对象值的方法。为此,我们使用这两个关键字

  • get - 定义一个 getter 方法来获取属性值
  • set - 定义一个 setter 方法来设置属性值

JavaScript Getter

在 JavaScript 中,getter 方法用于访问对象的属性。例如:

const student = {

    // data property
    firstName: 'Monica',
    
    // accessor property(getter)
    get getName() {
        return this.firstName;
    }
};

// accessing data property
console.log(student.firstName); // Monica

// accessing getter methods
console.log(student.getName); // Monica

// trying to access as a method
console.log(student.getName()); // error

在上面的程序中,创建了一个 getter 方法 getName() 来访问对象的属性。

get getName() {
    return this.firstName;
}

注意:要创建 getter 方法,请使用 get 关键字。

同样,在访问值时,我们将其作为属性来访问。

student.getName;

如果您尝试将值作为方法访问,则会发生错误。

console.log(student.getName()); // error

JavaScript Setter

在 JavaScript 中,setter 方法用于更改对象的值。例如:

const student = {
    firstName: 'Monica',
    
    //accessor property(setter)
    set changeName(newName) {
        this.firstName = newName;
    }
};

console.log(student.firstName); // Monica

// change(set) object property using a setter
student.changeName = 'Sarah';

console.log(student.firstName); // Sarah

在上面的示例中,setter 方法用于更改对象的值。

set changeName(newName) {
    this.firstName = newName;
}

注意:要创建 setter 方法,请使用 set 关键字。

如上程序所示,firstName 的值为 Monica

然后,值被更改为 Sarah

student.changeName = 'Sarah';

注意:setter 必须有且仅有一个正式参数。


JavaScript Object.defineProperty()

在 JavaScript 中,您还可以使用 Object.defineProperty() 方法来添加 getter 和 setter。例如:

const student = {
    firstName: 'Monica'
}

// getting property
Object.defineProperty(student, "getName", {
    get : function () {
        return this.firstName;
    }
});

// setting property
Object.defineProperty(student, "changeName", {
    set : function (value) {
        this.firstName = value;
    }
});

console.log(student.firstName); // Monica

// changing the property value
student.changeName = 'Sarah';

console.log(student.firstName); // Sarah

在上面的示例中,Object.defineProperty() 用于访问和更改对象的属性。

使用 Object.defineProperty() 的语法是:

Object.defineProperty(obj, prop, descriptor)

Object.defineProperty() 方法接受三个参数。

  • 第一个参数是 objectName。
  • 第二个参数是 propertyName。
  • 第三个参数是一个描述属性的对象。

在我们结束之前,让我们来测试一下您对 JavaScript Getter 和 Setter 的掌握程度!您能解决下面的挑战吗?

挑战

编写一个函数来计算一个数字的阶乘。

  • 非负整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。
  • 例如,3 的阶乘是 3 * 2 * 1 = 6
  • 返回输入数字 num 的阶乘。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战