javascript对象基础(使用对象)---2对象、属性、方法的高级操作-Object

三、对象的高级用法(ECMScript5):Object  Array  Function String

    Object ------

     1.  创建对象(前面使用的是1.使用对象直接量2.通过new创建对象)

          Object.create(prototype,descriptors) //prototype为必需参数,要用作原型的对象,可以为null;第二个可选,属性描述项对象 ,即descriptors是个javascript对象{}

           //数据属性描述符包含value特性:writable  enumerable  configurable,若未指定 都默认为false

          //访问器属性描述符:设置属性值的函数set     返回属性值的函数get

         1.1  var newObj.create(null,{

               size:{

                   value:'large',

                   enumerable:true

                    },

              shape:{

                     value:"round",

                    enmumerable:true

                  }

            })

        newObj.size;//large    newObj.shape;//round

        Object.getPrototypeOf(newObj);//null

   1.2使用Object.create创建一个与Object对象具有相同对象的原型对象

      var first={x:undefined,y:undefined}//定义的对象直接量

         var   second=Object.create(Object.prototype,{

           x:{

                 value:undefined,

                writable:true,

               configurable:true,

               enumerable:true

              },

           

       y:{

                 value:undefined,

                writable:true,

               configurable:true,

               enumerable:true

               },

})

        Object.getPrototypeOf(first);//[object  Object]

       Object.getPrototypeOf(second);//[object  Object]

   2.1定义属性:2个静态函数  Object.defineProperty()、Object.defineProperties()

        Object.defineProperty(object,propertyname,desciptor)//将属性添加到对象,或者修改现有属性的特性

       Object.defineProperties(object,desciptors)//将多个属性添加到对象,或者修改现有多个属性的特性

    例:

       var obj={}

         Object.defineProperty(obj,"newDataProperty",{

           value:101,

           writable:true,

          enumerable:true,

         configurable:true

        });

        obj.newDataProperty=102;//将newDataProperty的值101修改为102

   document.write(obj.newDataProperty);//102

   

 var obj={}

         Object.defineProperties(obj,{

              newDataProperty:{

                  value:101,

                 writable:true,

                  enumerable:true,

                 configurable:true},

                 newAccessorProperty:{

                  set:function(x){this.newaccpropvalue=x},

                  get:function(){retrun this.newaccpropvalue}

              }

        });

     obj.newAccessorProperty=10;

  document.write(obj.newAccessorProperty);//10

  2.2.访问属性(前面使用的是1  .方式   2  数组方式  3 for in)

  Object.getPrototypeOf(object);//返回指定对象object的原型

  Object.getOwnPropertyDesciptor(object,propertyname);//获取指定对象object的私有属性描述符

  Object.getOwnPropertyNames(object);返回指定对象object私有属性的名称,包括可枚举和不可枚举的属性和方法的名称

   Object.keys(object);返回仅可枚举的的属性和方法的名称,object也可以是创建的对象或现有的dom对象

  例:

  1.---   function Pasta(grain,width){

        this.grain=grain;

       this.width=width;

      }

   var spaghetti=new Pasta("wheat",0.2); var proto=  Object.getPrototypeOf(spaghetti)

   docuement.write(proto===Pasta.prototype);//true

   

 2--  function Pasta(grain,width,shape){

        this.grain=grain;

        this.width=width;

       this.toString=function(){

           return(this.grain+","+this.width+","+this.shape)

       }

      }

       var spaghetti=new Pasta("wheat",0.2,"circle");

   var arr=  Object.getOwnPropertyNames(spaghetti);

   docuement.write(arr);//grain,width,shape,toString

3--var obj={}

  obj.newDataProperty="abc",

  var descriptor=Object.getOwnPropertyDescriptor(obj,"newdataProperty");//获得对象私有属性的描述符

       descriptor.writable=false;//修改特性

    Object.defineProperty(obj,"newdataProperty",descriptor);//定义属性

  var desc2=Object.getOwnPropertyDescriptor(obj,"newdataProperty");//获得对象私有属性的描述符

  for(var prop in des2){

      document.write(prop+':'+desc2[prop]);

      document.write("<br/>");

   }//value:abc   writable:false     enumerable:true     configruable:ture

     2.2配置属性的特性

  Object.freeze(object);//阻止修改现有属性的特性和值,以及添加新属性

  Object.seal(object);//阻止修改现有属性的特性,以及添加新属性,但可以修改属性的值

  Object.preventExtensions(object);//阻止添加新属性,但修改属性的特性和值

  举例:

     1  var  obj={  pasta:"spahetti",length:10}

             Obeject.preventExtensions(obj);//只是阻止添加新属性

            obj.newPorp=50;  obj.pasta=50;

            document.write(obj.newProp);//undefined 

            document.write(obj.pasta);//50

     

        2   var  obj={  pasta:"spahetti",length:10}

           Obeject.freeze(obj);

            obj.newPorp=50;  obj.pasta=50;

            document.write(obj.newProp);//undefined 

            document.write(obj.pasta);//"spahetti"

2.3检测属性的特性

  Object.isSealed(object);//如果无法再对象中修改现有属性的特性,且无法向对象添加新属性,则 返回true

  Object.isFrozen(object);//如果无法再对象中修改现有属性的特性和值,且无法向对象添加新属性,则 返回true

  Object.isExtensible(object);//如果可扩展(即可添加新属性),则为true,否则返回false

  举例:

     var  obj={  pasta:"spahetti",length:10}

    if(!Object.isFrozen(obj)){obj.pasta=50;}

    Object.freeze(obj)

   document.write(obj.pasta)

猜你喜欢

转载自blog.csdn.net/wenmin1987/article/details/85543757