Object.defineProperty方法
Object.defineProperty() (一次添加/修改一个属性)
用法:Object.defineProperty(obj, prop, descriptor)
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
var obj={name:"Jane"}
Object.defineProperty(obj,'age',{
value:"16",
writable:true, //可重写
enumerable:true, //可枚举
configurable:true //可删除该属性(用到delete)
})
//writable:true的时候,obj.age重写可以成功
obj.age=19
for(var i in obj){
console.log(i)
}
console.log(Object.keys(obj)) //返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性
delete obj.age //configurable:true
console.log(obj) //当使用存储性描述的时候,不能用的value和writable
//如果不设置方法,则get和set的默认值是undefined
var obj={name:"Jane"}
var initVal = 16
Object.defineProperty(obj,'age',{
get:function(){
return initVal
},
set:function(newVal){
initVal = newVal
},
enumerable:true, //可枚举
configurable:true //可删除该属性(用到delete)
})
//获取值
console.log(obj.age) //
//设置值
obj.age=20;
console.log(obj.age) //
var obj={name:'Jane'}
//Object.getOwnPropertyDescriptor方法,可查看属性特性的值
var aa = Object.getOwnPropertyDescriptor(obj,'name')
console.log(aa)//{value: "Jane", writable: true, enumerable: true, configurable: true}
通过对象字面量定义的属性,它的数据属性:writable,enumerable,configurable默认为true
而通过Object.defineProperty定义的属性,它的数据属性:writable,enumerable,configurable默认为false
Object.defineProperties() (一次可以添加/修改一个或多个属性)
Object.defineProperties(object, descriptors)
将一个或多个属性添加到对象,并/或修改现有属性的特性。
var obj = {name:'Jack'};
Object.defineProperties(obj, {
age:{ //这块同上面的例子,只不过属性名放在了下面
value:18
}
})
一次添加多个属性
var obj = Object.defineProperties({}, {
age:{
value:18
},
name:{
value:'Jack'
},
gender:{
value:'male'
}
})
Object.setPrototypeOf()方法设置一个指定的对象的原型(即,内部[[Prototype]]属性)到另一个对象或null;
语法:Object.setPrototypeOf(obj,prototype);
obj:要设置其原型的对象
prototype:该对象的新原型(一个对象或者null,如果参数不是一个对象或者null(例如,数字,字符串,boolean,或者undefined),则什么都不做
Object.preventExtensions()
方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
语法:Object.preventExtensions(obj)
参数:obj 将要变得不可扩展的对象;返回值;已经不可扩展的对象;
如果一个对象可以添加新的属性,则这个对象是可扩展的。Object.preventExtensions()将对象标记为不再可扩展,因此
它将永远不会具有超出它标记为不可扩展的属性。注意,一般来说,不可扩展对象的属性可能仍然可被删除。尝试将新属性添加到不可扩展对象将静默失败或抛出异常TypeError(最常见但不排除其他情况,如在strict mode中)
Object.preventExtensions()仅阻止添加自身的属性。但属性仍然可以添加到对象原型中。
一旦使其不可扩展,就无法再对对象进行扩展。
Object.hasOwnProperty()方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性,不包括该原型中的属性。
Object.defineProperty方法的更多相关文章
- Object.defineProperties()和Object.defineProperty()方法
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法:Object.defineProperty(obj, pro ...
- Object.defineProperty方法 使用
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法: Object.defineProperty(obj, pr ...
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...
- JavaScript Object.defineProperty()方法详解
Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法 Object.defineProperty(obj, prop ...
- js中Object.defineProperty()方法的解释
菜菜: “老大,那个, Object.defineProperty 是什么鬼?” 假设我们有个对象 user ; 我们要给它增加一个属性 name , 我们会这么做 1 2 3 var user = ...
- Vue el与data的两种写法 && Object.defineProperty方法
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
- JavaScript使用Object.defineProperty方法实现双数据绑定
Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的. 本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始使用 O ...
- ES5 Object.defineProperty 方法
先看一个例子: var o = {}; o.a = 1; // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: true, confi ...
- Object.defineProperty()方法学习笔记
这是js中一个非常重要的方法,ES6中某些方法的实现依赖于它,VUE通过它实现双向绑定 此方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象 参数 Object.def ...
随机推荐
- linux修改用户id,组id
一.修改用户uid usermod -u foo 二.修改用户gid groupmod -g 2005 foo usermod -g 2005 foo 三.检查 cat /etc/passwd su ...
- WebServices 注解汇总
Web Service 元数据注释 @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值为 Java 类的 ...
- JMS Cluster modules
是GeoServer实现集群还是在数据库实现集群? Hadoop.Spark.HBase与Redis的适用性见解:https://blog.csdn.net/cuiyaonan2000/article ...
- stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h文件作用
如上图,在STM32的Keil工程文件(Project)中一般都包含stm32f10x_it.c.stm32f10x_it.h和stm32f10x_conf.h这三个文件,但是在ST官方提供的标准库“ ...
- SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN
一.基本信息 标题:SAwUML – UML-based, contractual software architectures and their formal analysis using SPI ...
- Javaweb 编解码流程
参考: https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/#N10263 https://www.cnblogs.com/ch ...
- css之absolute温习
1.absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位.(父元素不仅可以是相对定位(relative)) 2.当绝对定位的元素找不到定位类型是非static定位 ...
- EF学习笔记(九):异步处理和存储过程
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...
- CCNA学前基础一
网络设备: 集线器:集线器就是一种采用共享式工作状态的设备.Hub将信号放大后传输给其他端口,即传输线路是共享的. 交换机:用于连接终端设备,和基本的安全功能还有广播域的隔离.优点实现多用户同时访问, ...
- querySelectorAll选择器的js实现
自从标准浏览器增加了querySelector这个类JQ的方法后,选择一个元素变成了一件so easy的事情.但是某些浏览器还是不支持.使用jq库又有点太大,其实可以自己动手实现这个选择器,具体代码如 ...