【发布时间】:2014-02-19 16:24:45
【问题描述】:
我仍然不觉得我完全理解 Object.defineProperties 的使用,所以我希望能对以下(有些人为的)示例提供一些意见:
1。在以下代码中,my_val 与 one 和 two 的行为相同:
var Class_1 = function (arg) {
this.my_val = arg;
};
var Class_2 = function (arg) {
Object.defineProperties(this,{
my_val : {
value : arg,
writable : true,
enumerable : true,
configurable : true
}
});
};
var one = new Class_1("foo");
var two = new Class_2("foo");
使用defineProperties 而不是像在Class_1 中那样分配它的原因是,当您希望writable、enumerable 或configurable 为假时;基本上是为了控制。否则简单的this.property 定义是相同的,对吗?
2。在以下代码中,my_val 的行为与 three 和 four 相同:
var Class_value = function (arg) {
Object.defineProperties(this, {
my_val : {
value : arg,
writable : true,
// enumerable : false // default
// configurable : false // default
}
});
};
var Class_getSet = function (arg) {
Object.defineProperties(this, {
__my_val : {
value : arg,
writable : true,
// enumerable : false // default
// configurable : false // default
},
my_val : {
get : function(){ return this.__my_val; },
set : function(new_val){ this.__my_val = new_val; }
}
});
};
var three = new Class_value("foo");
var four = new Class_getSet("foo");
而使用get/set 函数而不是value 的原因是当您想要添加更高级的逻辑时,例如在更新my_val 时调用另一个函数,或发送事件等。此外,您不能使用 get/set 而不至少定义初始值(通过此处显示的 value 属性,或通过 1. 中的简单 this.property = ... 定义),对吗?
基本上,我只是想确保自己了解如何以及何时使用 defineProperties 的原因,因为我觉得我还没有很好地掌握这个概念。
【问题讨论】:
标签: javascript object properties