码迷,mamicode.com
首页 > 其他好文 > 详细

关于对象的一些问题

时间:2016-10-26 00:05:47      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:建立   cti   console   esc   数组   遍历   对象   symbol   没有   

      对象的属性有属性描述符的对象,即使没有直接给出。

var obj = {
       name: ‘objcet‘
};

Objcet.getOwnpropertyDescriptor(obj, "name"); // 为:{value: "objcet", configurable: true, writable: true, enumerable: true}

//直接给出
Object.defineProperty(obj, "tool", {
value: "tool"
});

Objcet.getOwnpropertyDescriptor(obj, "tool"); // 为:{value: "tool", configurable: false, writable: false, enumerable: false}


   这里默认含有一个对象描述符对象。且各项默认为true。我们可以对其进行多项操作。若我直接给出呢?这是若不在对象中明确给出,那么就会默认为false。

   问题是这四个值重要吗?

       value可以直接修改值,writable决定是否可以写入,enumerable决定for in 语句、Objcet.keys()、o.propertyIsEnumerable(),configurable决定是否可以删除属性值以及是否可以配置。

   问题2:浅复制下不会对原有的描述符的属性进行复制,也就是说其中的值默认为true。

   访问器属性:它们与value、writable是冲突的,只能给出一种形式。

var obj = {
       get value () {
        return this._value;  
       },
       set value (v) {
        this._value = v; 
       }
};
//这是的value是不可枚举、不可配置的。_value是可以枚举配置的。

  枚举

       for...in 语句会以[[prototype]]链的方式枚举但枚举的是属性名。

var arr = [1, 2, 3];
for (var i in arr) {
     console.log(i);
}
//值为:"0"、"1"、"2"

  另:Object.keys()、Objcet.getOwnPropertyNames()不会查找原型链。

遍历:

     数组内置@@iterator从而可以遍历得到值,对于一个对象可以认为建立@@iteraror来与for of 语句搭配使用。下面是一个例子。

var random = {
        [Symbol.iterator]: function () {
                return {
                      next: function () {
                             return {
                                    value: Math.random()
                             }; 
                      }
                };
        }
};

 

关于对象的一些问题

标签:建立   cti   console   esc   数组   遍历   对象   symbol   没有   

原文地址:http://www.cnblogs.com/hustliliangmin/p/5998464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!