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方法的更多相关文章

  1. Object.defineProperties()和Object.defineProperty()方法

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法:Object.defineProperty(obj, pro ...

  2. Object.defineProperty方法 使用

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法: Object.defineProperty(obj, pr ...

  3. Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...

  4. JavaScript Object.defineProperty()方法详解

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

  5. js中Object.defineProperty()方法的解释

    菜菜: “老大,那个, Object.defineProperty 是什么鬼?” 假设我们有个对象 user ; 我们要给它增加一个属性 name , 我们会这么做 1 2 3 var user = ...

  6. Vue el与data的两种写法 && Object.defineProperty方法

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  7. JavaScript使用Object.defineProperty方法实现双数据绑定

    Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的. 本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始使用 O ...

  8. ES5 Object.defineProperty 方法

    先看一个例子: var o = {}; o.a = 1; // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: true, confi ...

  9. Object.defineProperty()方法学习笔记

    这是js中一个非常重要的方法,ES6中某些方法的实现依赖于它,VUE通过它实现双向绑定 此方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象 参数 Object.def ...

随机推荐

  1. Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方

    首先看看MonoBehaviour的生命周期 先上个图(来源 http://blog.csdn.net/qitian67/article/details/18516503): 1.Awake 和 St ...

  2. Linux常用的工具软件安装

    一. linux简单介绍 linux的优势 可靠的安全性,良好的稳定性,完善的网络功能 跨平台的硬件支持,丰富的软件支持,多用户多任务 Linux的发行版本 Redhat 红帽子,最大稳定 CentO ...

  3. 学习Acegi应用到实际项目中(12)- Run-As认证服务

    有这样一些场合,系统用户必须以其他角色身份去操作某些资源.例如,用户A要访问资源B,而用户A拥有的角色为AUTH_USER,资源B访问的角色必须为AUTH_RUN_AS_DATE,那么此时就必须使用户 ...

  4. anemometer安装

    1.背景介绍:nginx:1.9.3 安装路径/data/nginxphp:5.5.27 安装路径 /data/phpmysql:5.7.18 安装路径/usr/local/mysql软件下载目录 / ...

  5. 正则表达式校验yyyymmdd

    正则表达式为 ([\\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9] ...

  6. Forward团队-爬虫豆瓣top250项目-开发文档

    项目地址:https://github.com/xyhcq/top250 我在本次项目中负责写爬虫中对数据分析的一部分,根据马壮分析过的html,我来进一步写代码获取数据,具体的功能及实现方法我已经写 ...

  7. 将 Idea 常用快捷键 设置为 Eclipse 的快捷键

  8. cv2.cvtColor Unsupported depth of input image

    源代码 import cv2 import numpy as ny img = ny.zeros( ( 3 , 3 )) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) ...

  9. 转 SaaS应用十大关键NFR - 第1部分

    非功能需求(SaaS的NFR)是跨越应用功能的跨越所有模块和功能的要求.这些要求深入到应用程序的架构,这是他们得到解决的地方.因此,在SaaS架构阶段之前了解这些NFR对于特定应用程序很重要,因此应用 ...

  10. shell脚本新建文件夹或用到目录时多出M或者?之类的

    新建问价加多出? 删除多显示M   建立软连接多\n等 可能是文件兼容问题, 1.首先用vi命令打开文件[root@localhost test]# vi test.sh   2.在vi命令模式中使用 ...