首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在_.defaults()之前调用Object.defineProperty()

在_.defaults()之前调用Object.defineProperty()
EN

Code Review用户
提问于 2016-09-19 19:02:22
回答 1查看 203关注 0票数 0

在回顾我以前的一个项目时,我注意到在一个特定的类定义中,我正在这样做:

代码语言:javascript
复制
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
    })
}

如果我像这样初始化客户端对象:

代码语言:javascript
复制
var client = new SDKClient({clientId: "x", clientSecret: "y"})

在属性已经与defineProperty合并之后,我是否应该期望调用_.defaults()会出现问题?在运行测试时,我没有看到任何错误或问题,但这是一个大型项目,我无法确定是否有什么错误是模糊的。如果不好的话,为什么不可以呢?

EN

回答 1

Code Review用户

回答已采纳

发布于 2016-09-19 21:06:05

我不这么认为,_.defaults。属性将在this上设置,但是可枚举的。对Object.defineProperty的调用只会将这些属性设置为不可枚举。如果属性不存在,那么value将被设置为undefined和默认描述符。

让我们只说出必要的。

空物体。

代码语言:javascript
复制
var x = {};
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));

对象设置为clientId

代码语言:javascript
复制
var x = {
  clientId: 1
};
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));

空物体。

代码语言:javascript
复制
var x = Object.defineProperty({}, 'clientId', {
  enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));

注意,设置了默认描述符。

对象设置为clientId

代码语言:javascript
复制
var x = Object.defineProperty({
  clientId: 1
}, 'clientId', {
  enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));

所以,如果有什么事情给你带来问题,那就是这种情况。

代码语言:javascript
复制
var x = Object.defineProperty({}, 'clientId', {
  enumerable: false
});
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));
x.clientId = 1;
console.log(Object.getOwnPropertyDescriptor(x, 'clientId'));
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/141838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档