理解Object.defineProperty函数中的get与set
defineProperty是什么:
该函数可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。通俗理解就是:
给对象添加一个新的属性,或者针对对象里的某些属性,可以给这个属性设置一些特性,比如是否只读,是否可以被for..in或Object.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
理解Object.defineProperty函数中的get与set的更多相关文章
- 深入理解 Object.defineProperty 及实现数据双向绑定
Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...
- 理解 Object.defineProperty
理解 Object.defineProperty 本文写于 2020 年 10 月 13 日 Object.defineProperty 用于在一个对象上定义新的属性或修改现有属性并返回该对象. 什么 ...
- 理解Object.defineProperty()
理解Object.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 基本语法:Obj ...
- 理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- [转] 理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- 《转》理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- 简单的理解 Object.defineProperty()
Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性. Object.defineProperty(obj,prop,descriptor ...
- 理解 JS 回调函数中的 this
任何变量或对象都有其赖以生存的上下文.如果简单地将对象理解为一段代码,那么对象处在不同的上下文,这段代码也会执行出不同的结果. 例如,我们定义一个函数 getUrl 和一个对象 pseudoWindo ...
- 深入理解ES6箭头函数中的this
简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时 ...
随机推荐
- SSM框架下 Failed to load resource: the server responded with a status of 404 (Not Found)错误
这个错误提示的是js的引用路径有错: 1.检查应用路径是否正确(我的问题是路径是正确的但是去到页面就会提示404错误) 引用路径,最好都使用绝对路径 <script type="tex ...
- [转载]Oracle用户创建及权限设置
出处:https://www.cnblogs.com/buxingzhelyd/p/7865194.html 权限: create session 允许用户登录数据库权限 create table ...
- Eclipse中tomcat启动时报jar包 it's not a class错误;
Console报错如上: 解决方法: 在Eclipse中Servers文件夹下 对应的项目文件中catalina.properties文件中tomcat.util.scan.DefaultJarSca ...
- requirejs官网
http://www.requirejs.cn/
- UIPresentationController - iOS自定义模态弹出框
参考: https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/Definin ...
- java中‘\'和'/'的区别
斜杠“/”表示地址路径的下一级目录:反斜杠“\”表示转义字符,例如:要做制表,可以输入:\t:做换行:\n等.如果要输出反斜杠“\”也需要用转义字符:“\\” 在java中后台给前台传的时候如果 ...
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...
- vue filters中使用data中数据
vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...
- 论文笔记:Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering
Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering 2019-04-25 21: ...
- 【使用指南】ComponentOne Enterprise .NET开发控件集
为方便广大 .NET开发人员更好的使用 ComponentOne Enterprise .NET开发控件集,葡萄城专门推出了 ComponentOne Enterprise 使用指南,该指南详细地介绍 ...