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 ...
随机推荐
- jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token <
jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token < <input type="hidden" na ...
- javascript和c#aes加密方法互解
关键信息如下. javascript function Encrypt() { var key = CryptoJS.enc.Utf8.parse('8080808080808080'); var i ...
- mybatis中怎样使用having?
1.dao层代码 List<ErgTipSimpleBo> queryListMore(@Param("typeId") Integer typeId,@Param(& ...
- Windows 10 专业版 长期服务版 激活
这个用小白系统之后一段时间显示要求激活,或者更改产品秘钥.网上找了许多秘钥也是没啥用,又不想用激活工具的话,可以试试用win+R 输入cmd : 依次输入:slmgr /skms kms.digibo ...
- C++实现文件内字符数、单词数、行数的统计
先给出github上的代码链接以及项目需求 1. 项目简介 这个项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处 ...
- 【Selenium】【BugList5】chrom窗口未关闭,又新开窗口,报错:[8564:8632:0522/111825.341:ERROR:persistent_memory_allocator.cc(845)] Corruption detected in shared-memory segment.
环境信息:Windows7 64位 + python 3.6.5 + selenium 3.11.0 +pyCharm 解决方法: 执行 driver = webdriver.Chrome()前必须把 ...
- 学习Acegi应用到实际项目中(11)- 切换用户
在某些应用场合中,可能需要用到切换用户的功能,从而以另一用户的身份进行相关操作.这一点类似于在Linux系统中,用su命令切换到另一用户进行相关操作. 既然实际应用中有这种场合,那么我们就有必要对其进 ...
- 学以致用三十四-----python2.0加载图片
想用做一个静态图片为背景的页面.结果遇到了一些阻碍.其主要原因还是路径没有找对.网上也参考了不少方法,也许是因为版本不同,处理的方法也不同,因此按照网上的处理方式,也没有得到解决. 为此困惑了一天.结 ...
- 实践中 XunSearch(讯搜)更新索引方案对比
检测PHP-SDK的运行条件(查看是否支持XunSearch) $prefix/sdk/php/util/RequiredCheck.php $prefix #替换成你的安装目录 使用 XunSe ...
- mycat跟踪分析
mycat版本1.6 192.168.5.66 从 192.168.5.67主 一个user表 验证主从 log4j2修改日志level为debug schema.xml配置 启动服务,打开日志tai ...