在没有 Object.defineProperty 的情况下定义不可写属性?
Defining non-writable properties without Object.defineProperty?
所以我知道你可以做到这一点:
var obj = {};
Object.defineProperty(obj, 'staticProp', {
value: 'I will never change',
writable: 'false'
});
我知道你可以做到:
var obj = {
get gettableProp(){
return 'gettable!'
}
}
有没有办法以声明方式定义 non-writable/enumerable/configurable 属性,而不是像定义 getter 或 setter 那样使用 Object.defineProperty()?
我问的原因是因为我有一个函数可以传递这样的对象:
ObjectProcessor({
// A bunch of properties
})
当我想包含不可写或不可枚举的属性时,我真的希望能够保留这种简单的语法,而不是必须这样做
var obj = {}
Object.defineProperty(obj, 'staticProp', {
value: 'I will never change',
writable: 'false'
});
ObjectProcessor(obj);
Is there a way to define non-writable/enumerable/configurable properties declaratively instead of using Object.defineProperty(), the way you'd define a getter or setter?
没有
(有Object.defineProperties
,但我猜这不是你要找的)
不,没有其他方法(除了 Object.defineProperties
和 Object.create
允许您提供多个这些描述符)。
I'd really like to be able to keep that simple syntax
注意 Object.defineProperty
returns 传递的对象,因此您可以将代码简化为
ObjectProcessor(Object.defineProperty({}, 'staticProp', {
value: 'I will never change',
writable: 'false'
}));
并避免引入额外的 obj
变量。
使用命名约定,您可以将其构建到您的 ObjectProcessor 中:
var prefix = 'readonly_';
function ObjectProcessor(obj) {
Object.keys(obj).filter(function (name) {
// find property names which match your convention
return name.indexOf(prefix) === 0;
}).forEach(function (name) {
// make the new property readonly
Object.defineProperty(obj, name.substring(prefix.length), {
value: obj[name],
writable: false
});
// remove the old, convention-named property
delete obj[name];
});
// remaining ObjectProcessor logic...
}
这让您可以处理可写和只读属性:
ObjectProcessor({
readonly_id: 1,
name: 'Foo'
});
所以我知道你可以做到这一点:
var obj = {};
Object.defineProperty(obj, 'staticProp', {
value: 'I will never change',
writable: 'false'
});
我知道你可以做到:
var obj = {
get gettableProp(){
return 'gettable!'
}
}
有没有办法以声明方式定义 non-writable/enumerable/configurable 属性,而不是像定义 getter 或 setter 那样使用 Object.defineProperty()?
我问的原因是因为我有一个函数可以传递这样的对象:
ObjectProcessor({
// A bunch of properties
})
当我想包含不可写或不可枚举的属性时,我真的希望能够保留这种简单的语法,而不是必须这样做
var obj = {}
Object.defineProperty(obj, 'staticProp', {
value: 'I will never change',
writable: 'false'
});
ObjectProcessor(obj);
Is there a way to define non-writable/enumerable/configurable properties declaratively instead of using Object.defineProperty(), the way you'd define a getter or setter?
没有
(有Object.defineProperties
,但我猜这不是你要找的)
不,没有其他方法(除了 Object.defineProperties
和 Object.create
允许您提供多个这些描述符)。
I'd really like to be able to keep that simple syntax
注意 Object.defineProperty
returns 传递的对象,因此您可以将代码简化为
ObjectProcessor(Object.defineProperty({}, 'staticProp', {
value: 'I will never change',
writable: 'false'
}));
并避免引入额外的 obj
变量。
使用命名约定,您可以将其构建到您的 ObjectProcessor 中:
var prefix = 'readonly_';
function ObjectProcessor(obj) {
Object.keys(obj).filter(function (name) {
// find property names which match your convention
return name.indexOf(prefix) === 0;
}).forEach(function (name) {
// make the new property readonly
Object.defineProperty(obj, name.substring(prefix.length), {
value: obj[name],
writable: false
});
// remove the old, convention-named property
delete obj[name];
});
// remaining ObjectProcessor logic...
}
这让您可以处理可写和只读属性:
ObjectProcessor({
readonly_id: 1,
name: 'Foo'
});