zoukankan      html  css  js  c++  java
  • JavaScript基础知识整理(对象的属性)

    对象的定义

    无序属性的集合,属性可以包括基本值,对象或函数。

    JavaScript中有两类属性,数据属性和访问器属性。

    特征值

    JavaScript使用特征值来描述属性的行为,因为是为实现JavaScript引擎用的,所以不能直接访问。

    数据属性有4个特性:[[Configurable]]、[[Enumerable]]、[[Writable]]和[[Value]]。

    [[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。

    [[Enumerable]]表示能否使用for-in循环返回属性,默认为true。

    [[Writable]]表示能否修改属性的值,默认为true。

    [[Value]]包含着属性的值,读取属性值时从这里读,写入属性值时从这里写,默认为undefined。

    可以使用Object.defineProperty()来修改属性的特性,这个函数接收3个参数:属性所在对象,属性名,描述符对象。

    var person = {};
    Object.defineProperty(person,"name",{
            writable:false,
            value:"tony"  
    } 
    alert(person.name)//Tony
    person.name = "sam";
    alert(person.name)//Tony   因为writable设置为false所以不能修改值

    访问器属性没有数据值,相对的有setter()和getter()函数,读取属性值时调用getter(),写入属性值时调用setter()。

    访问器属性也有4个特性:[[Configurable]]、[[Enumerable]]、[[Get]]和[[Set]]。

    [[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。

    [[Enumerable]]表示能否使用for-in循环返回属性,默认为true。

    [[Get]]读取属性时调用的函数,默认为undefined。

    [[Set]]写入属性时调用的函数,默认为undefined。

    访问器属性不能直接定义,必须用Object.defineProperty()定义。

    var book = {
          _year:2000,
         edition:1
    }    
    Object.defineProperty(book,"year",{
          get:function(){
               return this._year;        
          } 
          set:function(newyear){
               if(newyear > 2000){
                     this._year = newyear;
                     this.edition = newyear - 2000
              }
        } 
    });    
    book.year = 2001;
    alert(book.edition);//2

    定义多个属性

    当要定义多个属性时可以用Object.defineProperties(),接收两个参数,要添加属性的对象以及由想要添加属性组成的对象。

    var book = {};
    Object.defineProperties(book,{
            _year:{
                    writable:true,
                    value:2000
            },
           edition:{
                   writable:true,
                   value:1
           },
           year:{
                   get:function(){
                          return this._year;
                   },
                   set:function(newyear){
                          if(newyear > 2000){
                                 this._year = newyear;
                                 this.edition = newyear - 2000;
                          }
                   }
           }
    });                            

    读取属性的特性

    想要获得属性的特性值可以用Object.getOwnPropertyDescriptor()方法,接收两个参数,属性所属的对象,属性名称,返回一个包含特性值的对象。

    var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
    alert(descriptor.value);//"2000"
    var descriptor1 = Object.getOwnPropertyDescriptor(book,"year");
    alert(descriptor.value);//"undefined"

     

     

  • 相关阅读:
    C++ Primer 学习笔记
    闷热的北京
    EasyUI实现购物车、菜单和窗口栏等最常用的用户界面功能.
    详细解读-this-关键字在全局、函数、对象、jQuery等中的基础用法!
    对于JavaScript原生的JS
    关于JavaScript原生的JS。工作接近一年,发现对于原生JS的基础内容总是不够掌握,特定抽出三个周的周末,结合本人的工作经验还有菜鸟教程及w3school的基础内容等整理了如下内容。对JS的常用知识进行概括!希望对大家能够有所帮助。
    最简单实用的JQuery实现banner图中的text打字动画效果!!!
    一路慢行的JavaScript之旅(add)!!!
    一路慢行的CSS之旅
    一路慢行的HTML5之旅!
  • 原文地址:https://www.cnblogs.com/xianglan666/p/13100296.html
Copyright © 2011-2022 走看看