Javascript 如何在**对象初始化时实现递归方法**?
假设我有以下目标:Javascript 如何在**对象初始化时实现递归方法**?,javascript,recursion,this,bind,Javascript,Recursion,This,Bind,假设我有以下目标: const dog = { sound: 'woof', speak: function() { console.log(this.sound) } } 如何在初始对象文字声明中递归实现dog.speak 我可以通过在初始对象文本之外定义dog.speak方法来实现这一点。例如: const dog = { sound: 'woof' } const dog.speak = () => { console.log(dog.sound)
const dog = {
sound: 'woof',
speak: function() {
console.log(this.sound)
}
}
如何在初始对象文字声明中递归实现dog.speak
我可以通过在初始对象文本之外定义dog.speak
方法来实现这一点。例如:
const dog = {
sound: 'woof'
}
const dog.speak = () => {
console.log(dog.sound)
window.setTimeout(dog.speak, 1000)
}
这是因为这里没有这个
概念-声音
属性明确属于狗
。但我更愿意在初始对象文本中定义这一切
为此,我需要通过.bind()
保存这个上下文。但是,在进行递归函数调用之前,我正在努力确定我将.bind()
dog
作为this
的位置
const dog = {
sound: 'woof',
speak: function() {
console.log(this.sound)
const speak = this.speak.bind(dog)
window.setTimeout(speak, 1000)
}
}
这在单个对象文本中实现了目标
在初始函数调用中,我们可以将dog
绑定为this
,这将在以后的所有函数调用中保留this
上下文
以前的尝试,例如:
const dog = {
sound: 'woof'
}
const dog.speak = () => {
console.log(dog.sound)
window.setTimeout(dog.speak, 1000)
}
在第一次函数调用后,将丢失其此
上下文<代码>此
将在第一次函数调用时引用狗
,然后在以后调用时引用窗口。箭头函数
首选方法是使用具有词汇上下文的箭头函数,this
-
//ECMAScript>=6
警犬={
声音:“呜”,
讲:函数(){
console.log(this.sound)
setTimeout(=>this.speak(),1000)
}
}
dog.speak()
。我更喜欢它,因为在其他方面dog.speak.bind(dog)
(或this.foo.bind(this)
或其任何变体)看起来像三明治。这是正确的,但很奇怪,因为对象在方法周围重复。是的。很好。不要使用上下文变量ctx
,只需参考dog
directlyNoted即可。谢谢你的评论^^