在回顾我以前的一个项目时,我注意到在一个特定的类定义中,我正在这样做:
var defaultOptions = { ... object of default options ... }
var SDKClient = function(options) {
var self = this
...
_.defaults(self, options, defaultOptions)
Object.defineProperty(self, 'clientId', {
enumerable: false
})
Object.defineProperty(self, 'clientSecret', {
enumerable: false
})
}如果我像这样初始化客户端对象:
var client = new SDKClient({clientId: "x", clientSecret: "y"})在属性已经与defineProperty合并之后,我是否应该期望调用_.defaults()会出现问题?在运行测试时,我没有看到任何错误或问题,但这是一个大型项目,我无法确定是否有什么错误是模糊的。如果不好的话,为什么不可以呢?
发布于 2016-09-19 21:06:05
我不这么认为,_.defaults。属性将在this上设置,但是可枚举的。对Object.defineProperty的调用只会将这些属性设置为不可枚举。如果属性不存在,那么value将被设置为undefined和默认描述符。
让我们只说出必要的。
空物体。
var x = {};
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));对象设置为clientId。
var x = {
clientId: 1
};
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));空物体。
var x = Object.defineProperty({}, 'clientId', {
enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));注意,设置了默认描述符。
对象设置为clientId。
var x = Object.defineProperty({
clientId: 1
}, 'clientId', {
enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));所以,如果有什么事情给你带来问题,那就是这种情况。
var x = Object.defineProperty({}, 'clientId', {
enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));
x.clientId = 1;
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));https://codereview.stackexchange.com/questions/141838
复制相似问题