★07.属性

2017-07-03  本文已影响0人  iDragonfly

简介

属性的查询和设置

var ab = a.b;
var ac = a["c"];
a.b = 6;
a["c"] = 7;
var o = {r : 1};
var c = inherit(o);
c.x = 2;
c.y = 2;
c.r = 2;
o.r;                    // 仍然为1,子对象c的覆盖行为不会影响到原型的属性
var len = a && a.b && a.b.c;        // JavaScript中的&&不会将操作数转换为布尔值,同时返回的不一定是布尔值,可以是其他真值或假值

删除属性

o = {x : 1};
delete o.x;             // true
delete o.y;             // true
delete o.toString;      // true
delete 1;               // true

delete Object.prototype;    // false,无法删除,属性是不可配置的
var x = 1;                  // false,不可配置
delete this.x;              // false,无法删除
function f() { }
delete this.f;              // false,不能删除全局函数

检测属性

var o = {x : 1};
"x" in o;           // true
"y" in o;           // false
"toString" in o;    // true
var o = {x : 1};
o.hasOwnProperty("x");                  // true
o.hasOwnProperty("y");                  // false
o.hasOwnProperty("toString");           // false
var o = inherit({y : 2});
o.x = 1;
o.propertyIsEnumerable("x");                        // true
o.propertyIsEnumerable("y");                        // false
Object.prototype.propertyIsEnumerable("toString");  // false

枚举属性

属性的gettersetter

var o = {
    odata = 0;
    get data() { return odata; },             // 逗号
    set data(value) { odata = value; }
}

o.data;             // 0
o.data = 10;

属性的特性

属性描述符

简述

Object.getOwnPropertyDescriptor()示例

// 返回 {value: 1, writable:true, enumerable:true, configurable:true}
Object.getOwnPropertyDescriptor({x : 1}, "x");

var random = {
    get octet() { return Math.floor(Math.random() * 256); }
};

// 返回 { get: /*func*/, set:undefined, enumerable:true, configurable:true}
Object.getOwnPropertyDescriptor(random, "octet");

Object.getOwnPropertyDescriptor({}, "x"); // undefined
Object.getOwnPropertyDescriptor({}, "toString"); // undefined

Object.definePeoperty()示例

var o = {};

// 定义属性o.x
Object.defineProperty(o, "x", {
    value : 1,
    writable : true,
    enumerable : false,
    configurable : true
});

// 设置o.x为不可写
Object.defineProperty(o, "x", {writable : false});

// o.x虽然不可写,但是仍然可配置,所以可以通过这种方式修改值
Object.defineProperty(o, "x", {value : 2});

// 可以将数据属性修改为存取器属性
Object.defineProperty(o, "x", {
    get : function () { return 0; }
});

Object.definePeoperties()示例

var p = Object.defineProperties({}, {
    x : {value : 1, writable : true, enumerable : true, configurable : true},
    y : {value : 1, writable : true, enumerable : true, configurable : true},
    r : {
        get : function () {
            return Math.sqrt(this.x * this.x + this.y * this.y)
        },
        enumerable : true,
        configurable : true
    }
});

数据属性

存取器属性

上一篇 下一篇

猜你喜欢

热点阅读