美文网首页
javascript----对象特性

javascript----对象特性

作者: 俗三疯 | 来源:发表于2017-06-06 11:00 被阅读33次

修改属性默认的特性:

  Object.defineProperty(属性所在的对象,属性名字,描述符对象)
  在调用Object.defineproperty()方法创建一个新的属性时,
  如果不指定,configurable、enumerable和writable特性的默认值都为false

描述符对象:

    属性对象必须为:configurable、enumerable、writable和value其中的一个或多个值

如:
var person = {}; Object.defineProperty(person,"name",{ writable:false, value:"LiAo" }) alert(person.name); // “LiAo” person.name = "MrLiao"; alert(person.name) ; //"LiAo"

属性类型

  • 数据属性
    • configurable: 能否delete、能否修改特性、能否修改为访问器属性,默认为true, ps: 一旦设置为false后不可逆转
    • enumerable: 能否通过for-in循环返回属性,默认为true
    • writable: 能否修改属性值,默认为true
    • value: 包含着这个属性的值,默认为undefined
  • 访问器属性

访问器属性不包含数据值,而是包含一对getter和setter函数(不是必须)
读取访问器属性——>调用getter,负责返回有效的值
写入访问器属性——>调用setter,负责如何处理数据

  • configurable: 同上
  • enumerable:同上
  • Get:读取属性时调用的函数,默认值为undefined
  • Set:写入属性时调用的函数,默认值为undefined
使用访问器属性的常见方式:设置一个属性的值会导致其他属性发生变化:
    var book = {
     _year:2004,
     edition:1
      };
     Object.defineProperty(book,"year",{
     get:function(){
             return this._year;
     },
     set:function(newValue){
             this._year = newValue;
             this.edition += newValue -2004;
      }
    }
    });
      book.year = 2005;
      alert(book.edition);   //2  

注意如果不是同时制定getter和setter的话,如只指定getter意味着属性时不可写的,写入属性会被忽略。所以要根据需求指定这两个函数,不然会出现一些小毛病哈

定义多个属性

使用Object.defineProperities()方法
var book = {}; Object.defineProperties(book,{ 第一个数据属性名:{ writable等特性: 布尔值 value: 属性值 }, 第一个数据属性名:{ writable等特性: 布尔值 value: 属性值 }, 第一个访问器属性名:{ get:function(){} set : function(){} },

读取属性的特征

 Object.getOwnPropertyDescriptor(属性所在的对象,属性名称)
 若是数据属性,返回包含configurable,enumberable,writable,value属性的对象
 若是访问器属性,返回包含configurable,enumberable,get,set属性的对象

相关文章

  • javascript----对象特性

    修改属性默认的特性: 描述符对象: 如:var person = {}; Object.definePropert...

  • javascript----创建对象

    如何优雅的去创建一个对象 在javascript中,创建一个对象有很多方法,但很多时候我们得根据我们的需求去选择其...

  • JavaScript----增强对象字面量

    当属性名称和变量名称相同的时候可以只写一个,成为增强对象字面量

  • 对象特性

    构造函数和析构函数 构造函数:创建对象时为对象的成员属性赋值 没有返回值也不写void 可以有参数,可以重载 析构...

  • 面向对象三大特性(一):封装

    面向对象有三大特性:封装、继承和多态。注意,是面向对象的三大特性而不是Java的三大特性,Java只是面向对象语言...

  • Class 的封装及调用-Python教学【StudyQuant

    前言:面向对象的三大特性是指:封装、继承和多态。论Class 的封装及调用 面向对象三大特性 面向对象的三大特性是...

  • 面向对象编程(二)

    面向对象编程(二) -------面向对象的基本特性 1、面向对象的基本特性 面向对象的编程是把现实客观存在的...

  • getter 与 setter

    主要内容: 对象特性 getter 与 setter 在 ES5 中加⼊了对象的特性, 本节就读写器特性加⼀说明....

  • Javascript 面向对象(创建对象)

    创建对象 对象属性默认特性 四中数据属性特性 [[Configurable]] // 能否delete 默认tr...

  • 面向对象

    面向对象:OOP 面向对象三大特性

网友评论

      本文标题:javascript----对象特性

      本文链接:https://www.haomeiwen.com/subject/eskgfxtx.html