Object.defineProperty的理解
一、Object.defineProperty:给一个对象定义一个新的属性或修改一个对象现有的属性,并且返回这个对象
1.语法:Object.defineProperty(参数1,参数2,参数3)
参数1:目标对象
参数2:需要修改或者添加的属性名
参数3:目标对象属性的一些特征(是一个对象)
其中参数3中也有一些参数:
参数1:value:属性值
参数2:writable:对象属性值是否可被修改,true表示允许,false表示不允许
参数3:configurable:对象属性是否可被删除,true为允许,false为不允许
参数4:enumerable:对象属性是否可被枚举(即遍历)
参数5:get():给一个属性提供getter方法,当访问这个对象的属性值时触发该方法
参数6:set():给一个属性提供setter方法,当设置这个对象的属性值时触发该方法
二、参数示例
1、value
var obj = {};
Object.defineProperty(obj,"name",{value:"Leslie Cheung"});
Object.defineProperty(obj,"age",{value:22});
console.log(obj);//Object(是一个Object对象)
2、writable
var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
writable:false//为false时不允许修改
})
obj.name = "leslie-cheung";
console.log(obj.name);//Leslie Cheung
var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
writable:true//为true时允许修改
})
obj.name = "leslie-cheung";
console.log(obj.name);//leslie-cheung
3、configurable
var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
configurable:false//为false时不允许被删除
})
delete obj.name;
console.log(obj.name);//Leslie Cheung
var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
configurable:true//为true时允许被删除
})
delete obj.name;
console.log(obj.name);//undefined
4、enumerable
var obj = {name:"Leslie Cheung",age:"20"};
Object.defineProperty(obj,"name",{
enumerable:false//为false时不可被遍历
});
Object.defineProperty(obj,"age",{
enumerable:false//为false时不可被遍历
});
console.log(Object.keys(obj));//[]
var obj = {name:"Leslie Cheung",age:"20"};
Object.defineProperty(obj,"name",{
enumerable:true//为true时可被遍历
});
Object.defineProperty(obj,"age",{
enumerable:true//为true时可被遍历
});
console.log(Object.keys(obj));//["name", "age"]
5、get()和set()
var obj = {name:"Leslie Cheung"};
Object.defineProperty(obj,"name",{
get(){
console.log("被访问,触发get()方法");//被访问时触发get()方法
},
set(val){
console.log("被设置了" + val + ",触发set()方法");//被设置时触发set()方法
}
});
obj.name;//输出结果:被访问,触发get()方法
obj.name = "leslie-cheung";//输出结果:被设置了leslie-cheung,触发set()方法
注意:当使用了get()方法或者set()方法的时候就不能使用value和writable中的任何一个属性否则会报错
6、for in和Object.keys()的区别
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype = {
sex:"男"
}
var man = new Person("Leslie Cheung",20);
console.log(Object.keys(man));//["name", "age"],返回一个数组,数组值为对象自身的属性,不包括继承原型的属性
for(var key in man){
console.log(key);//name age sex,遍历对象可枚举的属性,包括自身的属性,以及继承原型的属性
}
Object.defineProperty的理解的更多相关文章
- 浅谈兔兔对Object.defineProperty的理解
给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象 语法: Object.defineProperty(参数1,参数2,参数3) 参数1:目标对象 参数2:要修改或者添加的属性名称 ...
- 理解Object.defineProperty()
理解Object.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 基本语法:Obj ...
- 理解Object.defineProperty函数中的get与set
defineProperty是什么: 该函数可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象.通俗理解就是: 给对象添加一个新的属性,或者针对对象里的某些属性,可以给这 ...
- 深入理解 Object.defineProperty 及实现数据双向绑定
Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...
- 理解 Object.defineProperty
理解 Object.defineProperty 本文写于 2020 年 10 月 13 日 Object.defineProperty 用于在一个对象上定义新的属性或修改现有属性并返回该对象. 什么 ...
- 理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- [转] 理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- Object.defineProperty(o,p,descriptor ) 理解应用
1. Object.defineProperty 在一个对象上定义一个新属性,或修改一个已经存在的属性, 最终返回这个对象. var __define = this.__define || func ...
- 《转》理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
随机推荐
- cordava打包vue项目成app
注意:安装目录不要以中文命名 1.安装cordova :npm install -g cordova 2.安装java jdk :配置环境变量: 1.系统变量:名:JAVA_HOME 值:C:\ ...
- Spark Sql数仓报-Metastore contains multiple versions
Spark版本为2.1.0,Hadoop版本为2.7.1,元数据存储在mysql中,异常信息如下: Exception in thread "main" java.lang.Run ...
- 【UML】NO.49.EBook.5.UML.1.009-【UML 大战需求分析】- 包图(Package Diagram)
1.0.0 Summary Tittle:[UML]NO.49.EBook.1.UML.1.009-[UML 大战需求分析]- 包图(Package Diagram) Style:DesignPatt ...
- 强制SVN上传代码时添加日志
因SVN不能像Git一样,审核代码之后才合入到主版本.为了使开发人员养成良好的上传习惯,强制要求上付时必须写明上传内容. 可以通过以下方法设置 1,在SVN服务器上找到源码仓库路径,找到下面文件夹:C ...
- kfrobotaidlog查找
======查看最新的大于6的数量========== select c.questionid from (select a.questionid, b.clientQuestion from sim ...
- confd动态生成配置文件
下载安装confd $ mkdir -p $GOPATH/src/github.com/kelseyhightower $ git clone https://github.com/kelseyhig ...
- 【产品案例】我是如何从零搭建起一款健身O2O产品的?
作者: Wander_Yang 我在年初参与到“SHAPE”这款健身产品的研发中,也算是第一次以产品经理的身份,从0开始负责一个产品的建立. 产品是一款O2O的智能健身连锁店,目前产品已经上线8个月, ...
- jquery事件重复绑定
本文实例分析了jQuery防止重复绑定事件的解决方法.分享给大家供大家参考,具体如下: 一.问题: 今天发现jQuery一个对象的事件可以重复绑定多次,当事件触发的时候会引起代码多遍执行. 下面是一个 ...
- Entity Framework(Fluent API)
一.概述 Fluent API 可以理解为一种从POCO到数据库的映射约定,包括字段长度,类型,主外键等等,在EF Code First进行开发时候经常用到. 1.主键 modelBuilder.En ...
- css省...和div 内容过多,自动换行
1.shengluohao 就是这个... 加: overflow: hidden;/*超出部分隐藏*/ white-space: nowrap;/*不换行*/ text-overflow:ellip ...