Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用分解分配时保留对象范围?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何在使用分解分配时保留对象范围?

Javascript 如何在使用分解分配时保留对象范围?,javascript,ecmascript-6,Javascript,Ecmascript 6,考虑以下代码: const obj = { a: 'foo', b: function () { return this.a } } console.log(obj.a) // 'foo' console.log(obj.b()) // 'foo' const { a, b } = obj console.log(a) // 'foo' console.log(b()) // undefined 当我销毁obj时,b()无法再访问a 我怎样才能保留obj的作用域,并允许b

考虑以下代码:

const obj = {
  a: 'foo',
  b: function () { return this.a }
}

console.log(obj.a)   // 'foo'
console.log(obj.b()) // 'foo'

const { a, b } = obj

console.log(a)   // 'foo'
console.log(b()) // undefined
当我销毁
obj
时,
b()
无法再访问
a


我怎样才能保留obj的作用域,并允许
b()
在描述时访问它的兄弟属性/方法?

@dayan moreno leon给出了一个很好的选择

但我刚刚注意到,我可以简单地通过始终使用静态调用来处理:


可能的副本你有机会经历这一切。设计前
obj.b=ob.b.bind(obj)与其说是解构,不如说是调用上下文。你可以试试b.call(obj)
const obj = {
  a: 'foo',

  b: function () { return obj.a } //HERE! :D
}

const { a, b } = obj

console.log(obj.a)   // 'foo'
console.log(obj.b()) // 'foo'

console.log(a)   // 'foo'
console.log(b()) // 'foo'