1. Object.defineProperty() (一次添加/修改一个属性)
  1. 用法:Object.defineProperty(obj, prop, descriptor)
  1. 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
  1.      var obj={name:"Jane"}
  2. Object.defineProperty(obj,'age',{
  3. value:"16",
  4. writable:true, //可重写
  5. enumerable:true, //可枚举
  6. configurable:true //可删除该属性(用到delete)
  7. })
  8. //writable:true的时候,obj.age重写可以成功
  9. obj.age=19
  10. for(var i in obj){
  11. console.log(i)
  12. }
  13. console.log(Object.keys(obj)) //返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性
  14. delete obj.age //configurable:true
  15. console.log(obj)
  16.  
  17. //当使用存储性描述的时候,不能用的value和writable
  18. //如果不设置方法,则get和set的默认值是undefined
  19. var obj={name:"Jane"}
  20. var initVal = 16
  21. Object.defineProperty(obj,'age',{
  22. get:function(){
  23. return initVal
  24. },
  25. set:function(newVal){
  26. initVal = newVal
  27. },
  28. enumerable:true, //可枚举
  29. configurable:true //可删除该属性(用到delete)
  30. })
  31. //获取值
  32. console.log(obj.age) //
  33. //设置值
  34. obj.age=20;
  35. console.log(obj.age) //
  1. var obj={name:'Jane'}
    //Object.getOwnPropertyDescriptor方法,可查看属性特性的值
  2. var aa = Object.getOwnPropertyDescriptor(obj,'name')
  3. console.log(aa)//{value: "Jane", writable: true, enumerable: true, configurable: true}

通过对象字面量定义的属性,它的数据属性:writable,enumerable,configurable默认为true
 而通过Object.defineProperty定义的属性,它的数据属性:writable,enumerable,configurable默认为false

  1. Object.defineProperties() (一次可以添加/修改一个或多个属性)
  1. Object.defineProperties(object, descriptors)
  2. 将一个或多个属性添加到对象,并/或修改现有属性的特性。
  1. var obj = {name:'Jack'};
    Object.defineProperties(obj, {
  2. age:{ //这块同上面的例子,只不过属性名放在了下面
  3. value:18
  4. }
  5. })

一次添加多个属性

  1.     var obj = Object.defineProperties({}, {
  2. age:{
  3. value:18
  4. },
  5. name:{
  6. value:'Jack'
  7. },
  8. gender:{
  9. value:'male'
  10. }
  11. })

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. C语言字符串和十六进制的相互转换方式

    C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴.所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析 ...

  2. 复习支持向量机(SVM)没空看书时,掌握下面的知识就够了

    支持向量机(support vector machines, SVM)是一种二类分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器:支持向量机还包括核技巧,这使它成为实质上的非线性分类器. ...

  3. xml文档格式学习笔记

    xml入门经典 (pdf书籍) https://www.cnblogs.com/zhaopengcheng/p/6848802.html

  4. DOTween的基本用法

    首先声明一点,不要简单的认为 DOTween 只能用在 Transform 组件上完成一些简单的动画,或者是完成一些 UI 动画,DOTween 的用途是很广的,unity中有很多组件都可以使用 DO ...

  5. SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN

    一.基本信息 标题:SAwUML – UML-based, contractual software architectures and their formal analysis using SPI ...

  6. 记一下vue.js事件的修饰等问题

    在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求.尽管我们可以在 methods 中轻松实现这点,但更好的方式是 ...

  7. python网络编程 双人多人聊天

    在学习网路编程时,我们首先要考虑的是其中的逻辑,我们借助打电话的形式来了解网络编程的过程, 我们打电话时属于呼叫方,接电话的属于被呼叫方,那么被呼叫方一直保持在待机状态,等待主呼叫方 呼叫,只有在被呼 ...

  8. vue的学习之路

    一.vs code中,适合vue的前端插件 查看网址:http://blog.csdn.net/caijunfen/article/details/78749766 二.如何使用git从gitub上拉 ...

  9. 强大的jQGrid的傻瓜式使用方法。以及一些注意事项,备有相应的引入文件。

    在介绍我的使用前,先按照国际惯例,列上网址http://blog.mn886.net/jqGrid/ 里面第一项就有相应的demo. 好,进入正题: 在学习到node.js的时候,需要使用到jQGri ...

  10. 简单操作django中session和cookie

    cookie 1.会话技术 2.客户端的会话技术( 数据库保存在浏览器上) 3.问题导致原因: 在web应用中,一次网络请求是从request开始,到response结束,跟以后的请求或者跟其他请求没 ...