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

下面我将详细讲解“浅谈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中Json的语法与格式

    下面是详解“详解js中Json的语法与格式”的完整攻略。 什么是 JSON JSON(Javascript Object Notation)是一种轻量级的数据交换格式,在前端开发中广泛应用。它基于JavaScript对象语法,但是可以被用于保存和交换任何类型的数据。 JSON 的语法 JSON的语法非常简洁,只有两种结构:对象(Object)和数组(Arra…

    JavaScript 2023年5月27日
    00
  • JavaScript中清空数组的三种方法分享

    下面是详细讲解“JavaScript中清空数组的三种方法分享”的完整攻略。 JavaScript中清空数组的三种方法分享 在JavaScript中,我们经常需要清空一个数组,以便重新填充数据。本文将介绍三种方法来清空一个数组。 方法一:重置数组变量 该方法是最简单的一种方法。只需要将数组变量重新赋值为空数组即可清空该数组。 let arr = [1, 2, …

    JavaScript 2023年5月27日
    00
  • 解决JavaScript中0.1+0.2不等于0.3问题

    JavaScript 中 0.1 + 0.2 != 0.3,是因为在计算过程中涉及到小数转二进制的问题。大部分十进制小数无法完全转换为二进制,也就是存在精度误差,因此可能会出现计算结果与预期结果不完全相等的情况。解决这个问题可以有以下几种方式: 1. toFixed() 方法 toFixed() 方法可以将小数保留指定位数,并返回一个字符串类型的数值。因为是…

    JavaScript 2023年5月28日
    00
  • 解析Json字符串的三种方法日常常用

    当你需要从后端获取JSON格式的数据并在前端使用时,你需要解析该JSON字符串,将其转换为JavaScript对象,从而方便你在前端进行数据处理和呈现。下面将介绍三种常用的解析JSON字符串的方法: 1. 手动解析 手动解析JSON是最基本的方法。步骤如下: 使用JSON.parse()将JSON字符串转换为JavaScript对象 访问JavaScript…

    JavaScript 2023年5月27日
    00
  • js下用eval生成JSON对象

    使用eval函数可以将字符串转换为JavaScript代码执行,因此可以使用eval生成JSON对象。以下是生成JSON对象的完整攻略: 1. 准备JSON字符串 首先,你需要准备一个字符串表示的JSON数据。这个JSON字符串必须遵循JSON语法规范,且必须被引号包裹。下面是一个示例JSON字符串: var jsonStr = ‘{"name&q…

    JavaScript 2023年5月27日
    00
  • 组件库Monmrepo架构与开发调试环境构建详解

    组件库Monorepo架构与开发调试环境构建详解 什么是Monorepo架构? Monorepo架构是一种管理多个应用或模块的代码库的方式。 它将所有的应用和模块放在一个代码库中进行管理,这样可以方便地跨多个项目共享代码。 这种架构的主要优点是因为代码库更加集中,使得组织结构更加简单,能够更加方便地进行重构和重命名,同时也能够避免出现重复的代码。 如何使用M…

    JavaScript 2023年6月10日
    00
  • JS前端使用Blob和File读取文件的操作代码

    你想了解”JS前端使用Blob和File读取文件的操作代码”,下面我就为你详细讲解这个问题。 什么是Blob和File Blob和File是在前端任务中经常使用的两个对象,它们都是由二进制数据、文件名和文件类型组成的。其中,Blob对象可以表示不一定是一个JavaScript原生格式的数据,File对象则是特定的Blob对象,其基本体现是文件。这两个对象都可…

    JavaScript 2023年5月27日
    00
  • 基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作

    让我为您详细讲解“基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作”的完整攻略。 Mutation Observer 介绍 Mutation Observer 是 HTML5 新增的一种 DOM 监听方法,可以用来监听 DOM 树的变化。它可以监听某个 DOM 节点及其所有子节点树上的任何 DOM 改变,并可以配置响应相应的变…

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