Object.assign 浅拷贝
代码分析
javascript
复制
下载
this.events = Object.assign({onError: (evt) => {},onOpen: (evt) => {},onClose: (evt) => {},},{onError: (evt) => {console.log("Websocket 连接失败回调方法");},onOpen: (evt) => {this.updateSocketStatus(true);},onClose: (evt) => {this.updateSocketStatus(false);},} );
浅拷贝对方法的影响
-
方法会被正确拷贝:
-
Object.assign
会按照从右到左的顺序合并属性 -
同名属性会被后面的对象覆盖
-
方法作为函数对象会被复制引用(浅拷贝)
-
-
实际效果:
-
最终
this.events
会包含:-
onError
: 带有console.log
的版本 -
onOpen
: 调用this.updateSocketStatus(true)
的版本 -
onClose
: 调用this.updateSocketStatus(false)
的版本
-
-
-
this
绑定问题:-
箭头函数会保留定义时的
this
绑定 -
如果你的回调需要使用当前对象的上下文,箭头函数是合适的
-
如果使用普通函数,需要注意
this
绑定问题
-
浅拷贝的局限性
虽然方法会被正确复制,但需要注意:
-
复制的是函数引用,不是函数定义本身
-
如果源对象中的方法引用了外部变量,这些引用会被共享
-
对于复杂对象(如包含嵌套对象),只有第一层会被复制