题目描述
在构造Class时,有一些属性对象结构比较复杂,其中的成员函数逻辑不仅需要访问对象中的其他成员变量,还需要访问类中的属性/方法,比如下面一段代码:
class Dog {
name = '二哈'
action = {
bark:function(){
console.log(this.name, '汪汪')
}
}
}
dog.action.bark() //undefined 汪汪
在Dog
类中有一个aciton
属性,其中的bark
方法需要获取类的name
属性,上面的代码无法直接获取到,输出结果是//undefined '汪汪'
可以通过bind()
方法手动改变this
指向:
class Dog {
name = '二哈'
action = {
bark:function(){
console.log(this.name, '汪汪')
}.bind(this)
}
}
dog.action.bark() //二哈 汪汪
但如果bark
方法内部同时需要访问action
对象的其他成员属性值时,无法通过上面的方法进行解决,例如:
class Dog {
name = '二哈'
action = {
ishappy: true,
bark:function(){
if(this.ishappy)
console.log(this.name, '汪汪')
else
console.log(this.name, '呜呜')
}.bind(this)
}
}
const dog = new Dog()
dog.action.bark() // 二哈 呜呜
怎么修改能够使其输出期望的二哈 汪汪
呢?