我们创建一个对象 sam ,让后调用 Object.freeze 将该对象变为不可变对象。
![8207483-9c2ad22d0cd8cb13.jpg](https://upload-images.jianshu.io/upload_images/8207483-9c2ad22d0cd8cb13.jpg)
这样我们创建一个对象时,如果是在之前对象的基础上进行扩展,也可以理解继承,然后修改那些标识不同对象的属性值来重新获取定义一个对象。类似在这里我们 olderSam 的 age 增加 1,看上去没有什么问题,通常我们也是这么做,但是这样做的就会在 olderSam 和 sam 之间产生耦合度。
![8207483-930430cc18c550f7.jpg](https://upload-images.jianshu.io/upload_images/8207483-930430cc18c550f7.jpg)
![8207483-1764a79bd1769e9b.jpg](https://upload-images.jianshu.io/upload_images/8207483-1764a79bd1769e9b.jpg)
设想我们为对象添加 sam 一个新的 twitter 的属性,这时样还需修改 olderSam, 添加该属性以保持一致,这就是我们的问题。
![8207483-b5e2b5d3de71c5c2.jpg](https://upload-images.jianshu.io/upload_images/8207483-b5e2b5d3de71c5c2.jpg)
然后不手动地为 olderSam 添加 twitter 属性,是否无法自动更新添加该属性以继承 sam 的 twitter 属性的。
![8207483-9a3ee62afd65249c.jpg](https://upload-images.jianshu.io/upload_images/8207483-9a3ee62afd65249c.jpg)
这样我们就需要在 sam 和 olderSam 两个对象上做重复的工作。这是违反我们写优雅代码的原则的。
![8207483-7de1a8ae7e9de7b6.jpg](https://upload-images.jianshu.io/upload_images/8207483-7de1a8ae7e9de7b6.jpg)
解构我们通常组装一个对象,根据属性来组装对象,类似安装图纸来组装一个设配,那么解构就类似安装图纸将现有的对象进行一一分解。我们可以通过解构的特性来轻松地实现我们想要的效果。
![8207483-0951235908cb1f84.jpg](https://upload-images.jianshu.io/upload_images/8207483-0951235908cb1f84.jpg)
我们可以定义一个方法,接受一个名称作为参数,输出 hello ... 呵呵。
![8207483-02e4e1693150e85b.jpg](https://upload-images.jianshu.io/upload_images/8207483-02e4e1693150e85b.jpg)
![8207483-268bfc886141b49c.jpg](https://upload-images.jianshu.io/upload_images/8207483-268bfc886141b49c.jpg)
在 kotlin 这样现代新兴语言基本都支持参数默认值的特性,在 javascript 中 es6 中同样也支这个新的特性。我们可以在默认参数值中使用模板字面量,这里通过$占位符解析的变量。
![8207483-989c8694b2b4d992.jpg](https://upload-images.jianshu.io/upload_images/8207483-989c8694b2b4d992.jpg)
我们可以在参数变量中使用解析器。
![8207483-1b3e941cc38b5d77.jpg](https://upload-images.jianshu.io/upload_images/8207483-1b3e941cc38b5d77.jpg)
如果我们输入 null ,会将 null 作为值输入显示。
![8207483-cec04ca5e7d39291.jpg](https://upload-images.jianshu.io/upload_images/8207483-cec04ca5e7d39291.jpg)
![8207483-19bc49bd06235d9e.jpg](https://upload-images.jianshu.io/upload_images/8207483-19bc49bd06235d9e.jpg)
但是如果传入 undefined 作为参数值,就会使用默认值而认为您没有传入参数值。
![8207483-11b9805cbb47c558.jpg](https://upload-images.jianshu.io/upload_images/8207483-11b9805cbb47c558.jpg)