JavaScript对象访问器的工作原理及使用方法

 更新时间:2024年06月05日 08:30:28   作者:vilan_微澜  
今天来聊一下JavaScript中的对象访问器,JavaScript的主要功能之一是能够定义对象,这些对象可以封装属性和方法,本文将深入探讨 JavaScript 对象访问器是什么、它是如何工作的以及使用对象访问器的作用,需要的朋友可以参考下

一、前言

今天来聊一下JavaScript中的对象访问器。JavaScript的主要功能之一是能够定义对象,这些对象可以封装属性和方法,在与对象属性 交互的各种方式中,访问器起着至关重要的作用。本文将深入探讨 JavaScript 对象访问器是什么、它是如何工作的以及使用对象访问器的作用。

二、什么是 JavaScript 对象访问器

JavaScript对象访问器是一种用于定义和操作对象属性的方法。它们由两个特殊函数组成:gettersetter

getter:函数用于获取对象的属性值。当访问该属性时,getter函数会被调用,并返回相应的属性值。

setter:函数用于设置对象的属性值。当对属性进行赋值操作时,setter函数会被调用,并接受一个参数,即要设置的属性值。

例子:使用gettersetter比较典型的案例是vue.js中的依赖收集和触发依赖回调方法。

当读取对象属性时进行依赖收集;当对象属性值改变时,触发依赖回调方法。

1.定义对象访问器属性的两种方式

  • 使用对象字面量的方式定义。

  • 使用Object.defineProperty方法定义。

1.1 使用对象字面量定义

下面是如何使用对象字面量方式定义 gettersetter 的示例:

let order = {
    firstName: "Vilan",
    lastName: "Liu",
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    },
    set fullName(value) {
        let nameList = value.split(' ');
        this.firstName = nameList[0];
        this.lastName = nameList[1];
    }
};

console.log(person.fullName); // Vilan Liu
person.fullName = "Jack Ma";
console.log(person.firstName); // Jack
console.log(person.lastName); // Ma

在当前示例中,fullName是一个访问器属性。你对firstNamelastName属性的修改将会间接影响到该属性的变化。

1.2使用Object.defineProperty方法定义

下面是如何使用Object.defineProperty方法定义访问器属性 的示例:

let person = {
    firstName: "Vilan",
    lastName: "Liu"
};

Object.defineProperty(person, 'fullName', {
    get: function() {
        return `${this.firstName} ${this.lastName}`;
    },
    set: function(name) {
        let nameList = name.split(' ');
        this.firstName = nameList[0];
        this.lastName = nameList[1];
    }
});

console.log(person.fullName); // Vilan Liu
person.fullName = "Jack Ma";
console.log(person.firstName); // Jack
console.log(person.lastName); // Ma

在当前示例中,通过Object.defineProperty定义了person对象的访问器属性fullName

三、使用对象访问器的作用

1.属性封装和验证

对象访问器允许你隐藏对象的内部的私有属性,同时提供一个属性访问器让你能够正常去写私有属性,避免私有属性直接被修改而导致超出预期的错误。这在面向对象编程中也是经常使用的封装方式。

let user = {
    _wallet: 0,
    get wallet() {
        return this._wallet;
    },
    set wallet(value) {
        if (value <= 0) {
            console.error("钱包余额必须大于0!");
        } else {
            this._wallet = value;
        }
    }
};

user.wallet = -1; // 钱包余额必须大于0!
user.wallet = 1000000;
console.log(user.user); // 1000000

2.属性计算

getter可用于创建基于其他属性计算的属性。当一个属性依赖于其他属性的值时,这很有用。

let iceCream = {
    price: 5,
    amount: 2,
    get subtotal() {
        return this.price * this.amount;
    }
};

console.log(iceCream.subtotal); // 10

3.属性只读

可以使用 getter 创建只读属性,而无需定义 setter

let rectangle = {
    width: 20,
    height: 10,
    get area() {
        return this.width * this.height;
    }
};

console.log(rectangle.area); // 200
rectangle.area = 100;
console.log(car.description); // 200

在该例子中area属性只设置了一个getter访问器,所以为只读访问器属性

四、总结

JavaScript 对象访问器是一项强大的功能,可增强你对对象属性的交互方式。通过使用 gettersetter,可以向对象属性添加封装、验证操作,还能定义计算和只读属性。了解和利用对象访问器可以生成更健壮、更干净和可维护性强的代码。

以上就是JavaScript对象访问器的工作原理及使用方法的详细内容,更多关于JavaScript对象访问器的资料请关注脚本之家其它相关文章!

相关文章

  • Canvas drawImage方法实现图片压缩详解

    Canvas drawImage方法实现图片压缩详解

    这篇文章主要为大家介绍了Canvas drawImage方法实现图片压缩详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 动态更新highcharts数据的实现方法

    动态更新highcharts数据的实现方法

    下面小编就为大家带来一篇动态更新highcharts数据的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 怎样用Javascript实现函数柯里化与反柯里化

    怎样用Javascript实现函数柯里化与反柯里化

    这篇文章主要介绍了怎样用Javascript实现函数柯里化与反柯里化,想了解函数柯里化的同学,可以参考下
    2021-04-04
  • 基于webpack-hot-middleware热加载相关错误的解决方法

    基于webpack-hot-middleware热加载相关错误的解决方法

    下面小编就为大家分享一篇基于webpack-hot-middleware热加载相关错误的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • JS调用打印方法设置页眉页脚的实例

    JS调用打印方法设置页眉页脚的实例

    一个网页打印相关功能的扩展演示特效,在实现了打印功能外,还实现了打印预览、打印前的页眉页脚设置,直接打印等功能,以前对JS打印前设置页脚见的不多,所以这一个也算是挺有价值的,希望闲暇时参阅
    2013-05-05
  • 详解JavaScript中常用的函数类型

    详解JavaScript中常用的函数类型

    这篇文章主要介绍了三种JavaScript中常用的函数类型,包括匿名函数、动态函数、可变参数函数,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • 前端跨域的几种解决方式总结(推荐)

    前端跨域的几种解决方式总结(推荐)

    这篇文章主要介绍了前端跨域的几种解决方式,详细介绍了同源策略并同时给出了跨域的五种解决方案,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • 判断JavaScript对象是否可用的最正确方法分析

    判断JavaScript对象是否可用的最正确方法分析

    在调试JavaScript的过程中,你是不是经常会遇到object undefined的问题呢?你平时是怎样来测试对象是否存在呢?判断浏览器版本?判断JavaScript版本?本文来告诉你正确的方法。这篇文章涉及的浏览器可能古老一些,但是阐述的道理确实适合现在使用的。
    2008-10-10
  • javascript DOM操作之动态删除TABLE多行

    javascript DOM操作之动态删除TABLE多行

    DOM动态删除TABLE tr行的实现代码,需要的朋友可以参考下。
    2009-12-12
  • 一文详解Promise.race()方法功能及应用场景

    一文详解Promise.race()方法功能及应用场景

    这篇文章主要为大家介绍了Promise.race()方法功能及应用场景详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论