浅谈JS对象添加getter与setter的5种方法

yizhihongxing

下面我将详细讲解“浅谈JS对象添加getter与setter的5种方法”的完整攻略。

1. 什么是getter和setter函数?

在介绍添加getter和setter函数的方法之前,先来简单了解一下什么是getter和setter函数。

getter和setter函数是用于访问和设置对象属性的函数。通常情况下,使用getter和setter函数可以保证对象的属性不被直接访问,从而增强了数据的安全性和可控性。

一个简单的例子:

let obj = {
  _age: 20,
  get age() {
    return this._age;
  },
  set age(value) {
    if (value < 0) {
      console.error('Age cannot be negative');
      return;
    }
    this._age = value;
  }
};
console.log(obj.age); // 20
obj.age = -10; // Age cannot be negative
console.log(obj.age); // 20
obj.age = 30;
console.log(obj.age); // 30

从上面的例子可以看出,我们使用了getter和setter函数,访问和设置对象的_age属性。我们在setter中加了一层判断,如果value小于0,则返回错误提示,否则正常设置属性值。

2. 5种添加getter和setter函数的方法

下面将介绍5种添加getter和setter函数的方法。

2.1 Object.defineProperty()

Object.defineProperty()方法可以在一个对象上定义一个新属性或者修改一个对象的现有属性,并且可以定义这个属性的特性。

let obj = {};
Object.defineProperty(obj, 'age', {
  get: function() {
    return this._age;
  },
  set: function(value) {
    if (value < 0) {
      console.error('Age cannot be negative');
      return;
    }
    this._age = value;
  }
});
console.log(obj.age); // undefined
obj.age = -10; // Age cannot be negative
console.log(obj.age); // undefined
obj.age = 30;
console.log(obj.age); // 30

2.2 ES6 class中添加getter和setter

ES6 class中添加getter和setter函数,可以直接在class中使用get和set关键字。

class Person {
  constructor() {
    this._age = 20;
  }
  get age() {
    return this._age;
  }
  set age(value) {
    if (value < 0) {
      console.error('Age cannot be negative');
      return;
    }
    this._age = value;
  }
}
const p = new Person();
console.log(p.age); // 20
p.age = -10; // Age cannot be negative
console.log(p.age); // 20
p.age = 30;
console.log(p.age); // 30

2.3 立即执行函数(IIFE)+闭包生成getter和setter

使用立即执行函数(IIFE)+闭包,可以生成新的get和set函数,并将它们作为对象的属性。

let obj = (function() {
  let _age = 20;
  return {
    get age() {
      return _age;
    },
    set age(value) {
      if (value < 0) {
        console.error('Age cannot be negative');
        return;
      }
      _age = value;
    }
  };
})();
console.log(obj.age); // 20
obj.age = -10; // Age cannot be negative
console.log(obj.age); // 20
obj.age = 30;
console.log(obj.age); // 30

2.4 ES5 Object.prototype方法

可以使用ES5中Object.prototype方法,将getter和setter函数添加到所有对象中。

Object.defineProperty(Object.prototype, 'age', {
  get: function() {
    return this._age;
  },
  set: function(value) {
    if (value < 0) {
      console.error('Age cannot be negative');
      return;
    }
    this._age = value;
  }
});
let obj = {};
console.log(obj.age); // undefined
obj.age = -10; // Age cannot be negative
console.log(obj.age); // undefined
obj.age = 30;
console.log(obj.age); // 30

2.5 原型链

最后一种添加getter和setter的方法是使用原型链。

let Person = function() {};
Person.prototype = {
  get age() {
    return this._age;
  },
  set age(value) {
    if (value < 0) {
      console.error('Age cannot be negative');
      return;
    }
    this._age = value;
  }
};
let p = new Person();
console.log(p.age); // undefined
p.age = -10; // Age cannot be negative
console.log(p.age); // undefined
p.age = 30;
console.log(p.age); // 30

3. 总结

通过以上的5种方法,我们可以很方便地添加getter和setter函数,从而来保证对象属性的安全性和可控性。但是需要注意的是,在getter函数中不要对对象属性进行修改操作,否则会造成无限递归的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈JS对象添加getter与setter的5种方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js常用方法示例梳理(总结篇)

    JS常用方法示例梳理是一篇总结JS中常用方法的文章,在其中作者按照方法的特点进行了分类,并给出了对应的方法示例,以帮助读者快速掌握JS中常用方法的应用。 本篇文章将详细讲解每一个分类下的常用方法,以及这些方法的使用场景和示例。 字符串相关方法 在这一部分中,文章总结了一系列字符串相关的方法,包括字符串查找、替换、分割等。 查找方法:indexOf、lastI…

    JavaScript 2023年5月27日
    00
  • 小米推送Java代码

    下面是详细讲解“小米推送Java代码”的完整攻略,包含了以下内容: 背景介绍 准备工作 推送API调用流程 示例说明 背景介绍 小米推送是小米开发团队提供的一项推送服务,它可以让开发者在应用内通过各种方式向用户推送通知、消息等。小米推送支持Android和iOS两个平台,各种消息类型的推送都可以通过API接口实现。 本文主要介绍如何在Java应用程序中使用小…

    JavaScript 2023年6月11日
    00
  • JS 日期比较大小的简单实例

    这里是JS日期比较大小的简单实例的完整攻略。 1. 目标 我们的目标是比较两个日期,判断它们的大小关系。假设我们有两个日期:date1和date2。 2. 步骤 下面是实现这一目标的步骤: 2.1 将日期转换为时间戳 我们需要将日期转换为时间戳,方便进行比较大小。在JS中,将日期转换为时间戳的方式是通过调用Date对象的getTime方法来实现。例如: va…

    JavaScript 2023年5月27日
    00
  • 使用vue自定义指令开发表单验证插件validate.js

    使用Vue自定义指令开发表单验证插件validate.js的完整攻略主要包含以下几个步骤: 创建Vue自定义指令 定义表单验证规则 在自定义指令中执行表单验证 绑定自定义指令到表单元素 完善表单验证插件 下面将对这些步骤进行详细讲解: 创建Vue自定义指令 首先需要使用Vue的directive方法来创建一个自定义指令,如下所示: Vue.directive…

    JavaScript 2023年6月10日
    00
  • js+html+css实现简单日历效果

    下面是 “js+html+css实现简单日历效果”的攻略: 1. 导入CSS和JS文件 在head标签中导入显示日历所需的CSS和JS文件 <head> <link rel="stylesheet" type="text/css" href="calendarStyle.css"&…

    JavaScript 2023年6月10日
    00
  • javascript 取小数点后几位几种方法总结

    关于JavaScript取小数点后几位的方法,可以结合下面的代码和说明来进行总结: 一、使用toFixed方法 JavaScript内置的toFixed方法可以将一个数字四舍五入为指定小数位的数字字符串,具体语法如下: numObj.toFixed([digits]) 参数digits是可选的,表示需要保留的小数位数,如果不传入该参数则默认保留0位小数。调用…

    JavaScript 2023年6月11日
    00
  • 浅谈react-router@4.0 使用方法和源码分析

    浅谈react-router@4.0使用方法和源码分析 简介 React-Router是在React上的一个强大路由器。它可以处理导航并使页面发生渐进式加载。React-Router@4相对于上一版本有了许多改进,如无需添加任何特定的MIXIN,以及更好的文档。 使用方法 在使用React-Router之前,你必须先安装它。你可以直接在终端中输入命令来进行安…

    JavaScript 2023年6月11日
    00
  • JavaScript 中的六种循环方法

    让我们来详细讲解 JavaScript 中的六种循环方法。 1. for 循环 for 循环是 JavaScript 中最常用的循环方法之一。它可以用来遍历数组、对象等。for 循环的语法格式如下: for (let i = 0; i < array.length; i++) { console.log(array[i]); } 上面的代码中,i 是循…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部