defineProperty是什么:

该函数可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。通俗理解就是:

给对象添加一个新的属性,或者针对对象里的某些属性,可以给这个属性设置一些特性,比如是否只读,是否可以被for..inObject.keys()遍历等

语法:

Object.defineProperty(obj, prop, descriptor)

例如:

var obj = {};

Object.defineProperty(obj, "key", {
enumerable: false,
configurable: false,
writable: false,
value: "static"
});

设置特性的方式有2种:数据描述符存取描述符。

数据描述符存取描述符都具有以下2个属性:

configurable:  是否可以删除目标属性或是否可以再次修改属性的特性

enumerable:  此属性是否可以被枚举(使用for...in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。

数据描述符另外具有以下2个属性:

writable: 属性的值是否可以被重写。设置为true可以被重写;设置为false,不能被重写。默认为false

value: 属性对应的值,可以使任意类型的值,默认为undefined

存取描述符另外具有以下2个属性:

getter :是一种获得属性值的方法

setter:是一种设置属性值的方法。

get于set具体用法如下:

var obj = {},book = '三国演义';

Object.defineProperty(obj,'book',{
get: function(){
      //返回经过处理后的变量
return '<<'+book+'>>'
},
set: function(val){
    //利用临时变量接收赋值
book = val
}
}) console.log(obj.book) ==> "<<三国演义>>" obj.book = '西游记' console.log(obj.book) ==> "<<西游记>>"

该方式可以实现对某些属性返回特定格式的值。如果觉得临时变量不好看,可以换成下面的写法:

var obj = {__book:'三国演义'}

Object.defineProperty(obj,'book',{
get: function(){
      
return '<<'+this.__book+'>>'
},
set: function(val){
     //this指向原对象,定义一个属性用来接收赋值
this.__book = val
}
}) console.log(obj.book) ==> "<<三国演义>>" obj.book = '水浒传' console.log(obj.book) ==> "<<水浒传>>"

注意:get或set不是必须成对出现,任写其一就可以。如果不设置方法,则get和set的默认值为undefined

 

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

 

 

理解Object.defineProperty函数中的get与set的更多相关文章

  1. 深入理解 Object.defineProperty 及实现数据双向绑定

    Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...

  2. 理解 Object.defineProperty

    理解 Object.defineProperty 本文写于 2020 年 10 月 13 日 Object.defineProperty 用于在一个对象上定义新的属性或修改现有属性并返回该对象. 什么 ...

  3. 理解Object.defineProperty()

    理解Object.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 基本语法:Obj ...

  4. 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  5. [转] 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  6. 《转》理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  7. 简单的理解 Object.defineProperty()

    Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性. Object.defineProperty(obj,prop,descriptor ...

  8. 理解 JS 回调函数中的 this

    任何变量或对象都有其赖以生存的上下文.如果简单地将对象理解为一段代码,那么对象处在不同的上下文,这段代码也会执行出不同的结果. 例如,我们定义一个函数 getUrl 和一个对象 pseudoWindo ...

  9. 深入理解ES6箭头函数中的this

    简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时 ...

随机推荐

  1. CentOS7中GreVPN的配置

    目前只实现了三层的GRE隧道,但其实二层也可以实现的,但是没有找到很好的方法,待研究 环境如下: host A :  121.207.22.123 host B: 111.2.33.28 1. 在ho ...

  2. 使用Shader制作loading旋转动画

    效果图: 1.绕Z轴旋转的旋转矩阵 2.UV旋转的步骤 (1) 由于旋转矩阵是绕原点旋转的,要把要旋转的UV坐标平移到原点 i.uv -= float2(0.5, 0.5); float2 tempU ...

  3. 博客系统(cnblog)

    1.用户表:Userinfo 2.博客站点表:Blog 3.标签表:Tag 4.分类表:Category 5.文章表:Article 6.点赞踩表:ArticelUpDown 7.评论表:Commen ...

  4. 第一个Python游戏窗口

    不废话,撸起袖子就是干. import pygame import sys pygame.init(); caption=pygame.display.set_caption("Python ...

  5. centos6.9系列LNMP环境的安装

    一.Nginx 1.先解决Nginx的依赖关系: yum install -y pcre-devel openssl-devel 2.安装wget:sudo yum -y install wget 3 ...

  6. Eclipse中启动Tomcat报错:[There is insufficient memory for the Java Runtime Environment to continue.]的解决方案

    1,报错截图 2,报错信息 五月 08, 2018 9:57:58 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [Se ...

  7. Dio添加Cookie

    在使用Options添加headers时,Map没有定义内部类型: Dio dio = new Dio(); Map headers = new Map(); headers['Cookie'] = ...

  8. MyRedis

    目录 其他 其他 Redis面试题集

  9. Http协议&Servlet

    http协议 针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西. 版本 ...

  10. Oracle使用——oracle11g安装——Oracle要求的结果: 5.0,5.1,5.2,6.0 6.1 之一 实际结果: 6.2

    问题 正在检查操作系统要求...        要求的结果: 5.0,5.1,5.2,6.0 之一        实际结果: 6.1        检查完成.此次检查的总体结果为: 失败 <&l ...