diff --git a/docs/object.md b/docs/object.md index 4c94623..21c5222 100644 --- a/docs/object.md +++ b/docs/object.md @@ -559,12 +559,26 @@ const DEFAULTS = { function processContent(options) { options = Object.assign({}, DEFAULTS, options); + // ... } ``` 上面代码中,`DEFAULTS`对象是默认值,`options`对象是用户提供的参数。`Object.assign`方法将`DEFAULTS`和`options`合并成一个新对象,如果两者有同名属性,则`option`的属性值会覆盖`DEFAULTS`的属性值。 -注意,由于存在深拷贝的问题,`DEFAULTS`对象和`options`对象的所有属性的值,都只能是简单类型,而不能指向另一个对象。否则,将导致`DEFAULTS`对象的该属性不起作用。 +注意,由于存在深拷贝的问题,`DEFAULTS`对象和`options`对象的所有属性的值,最好都是简单类型,不要指向另一个对象。否则,`DEFAULTS`对象的该属性很可能不起作用。 + +```javascript +const DEFAULTS = { + url: { + host: 'example.com', + port: 7070 + }, +}; + +processContent({ url: {port: 8000} }) +``` + +上面代码中,原意是将`url.port`改成8000,`url.host`不变。实际结果却是`options.url`覆盖掉`DEFAULTS.url`,`url.host`不存在了。 ## 属性的可枚举性