我想使用描述符
将somme成员隐藏在javascript / typescript中的for in
循环中
const defaultDescriptor = {
configurable: true,
enumerable: false,
writable: true
}
更紧迫的是,我想将此描述符应用于类的成员,以便此类的每个实例都将从该成员的描述符继承。
我尝试过这个:
"use strict";
class Test1 {
test1 = 1;
}
Object.defineProperty(Object.getPrototypeOf(Test1), "test1", defaultDescriptor);
Object.defineProperty(Test1.constructor, "test1", defaultDescriptor);
Object.defineProperty(Test1, "test1", defaultDescriptor);
const t = new Test1();
console.log(Object.keys(t)); // expected [], received [ "test1" ]
但是属性test1
仍可枚举。
我也尝试过
"use strict";
function notEnumerable(target: any, propertyKey: string) {
let descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || defaultDescriptor;
descriptor.enumerable = false;
Object.defineProperty(target, propertyKey, descriptor)
}
class Test2 {
@notEnumerable
test2 = 2
}
const t = new Test2();
console.log(Object.keys(t)); // expected [], received [ "test2" ]
第二次尝试的灵感来自this answer,但是答案对我来说是不正确的("use strict"
会弹出错误,因为默认情况下writable为false)。
请注意,如果我将defaultDescriptor
替换为{}
,则成员test2
不可枚举,但也不可写。
您知道一种将成员声明为可写且在类级别不可枚举的方法(通过反对实例级别,在这种情况下一切正常)吗?