Javascript 为什么分解参数对象会影响它';s';这';价值
有人能告诉我为什么解构会影响对象的Javascript 为什么分解参数对象会影响它';s';这';价值,javascript,scope,this,destructuring,Javascript,Scope,This,Destructuring,有人能告诉我为什么解构会影响对象的值吗。有很多简单的解决方法,但我只想知道这里到底发生了什么。看起来它应该可以工作,但是在分解引起的这个范围中发生了一些奇怪的事情。有人知道吗 下面是一个简单的对象: const user = { name: 'John', age: 30, sayHi() { console.log(this); // undefined for foo(), but defined for bar() return `hello, ${this.n
值吗。有很多简单的解决方法,但我只想知道这里到底发生了什么。看起来它应该可以工作,但是在分解引起的这个
范围中发生了一些奇怪的事情。有人知道吗
下面是一个简单的对象:
const user = {
name: 'John',
age: 30,
sayHi() {
console.log(this); // undefined for foo(), but defined for bar()
return `hello, ${this.name}`;
}
};
在foo中,我使用destructuring来访问对象键,但该值在sayHi()中未定义
但在这里,只需传入对象而不进行分解,就可以按预期工作,并且定义了this值。
在第一种情况下,通过分解结构,您创建了对sayHi
函数的单独引用。然后,当您从foo主体调用它时,这将成为sayHi
主体中this
的上下文
在第二种情况下,您将其称为person.sayHi
,因此本例中的上下文是包含对象,即person
。在sayHi
中,这个
是人
,名字已经定义
解构没有什么神奇之处,如果手动创建对函数的引用,您将获得相同的效果:
const bar = person => {
const sayHi = person.sayHi;
console.log(sayHi());
};
啊,我现在明白了。我知道这很简单。所以如果我想把bind()从对象中分离出来,我可以使用bind()。谢谢
const bar = person => {
console.log(person.sayHi()); // hello, John
};
bar(user);
const bar = person => {
const sayHi = person.sayHi;
console.log(sayHi());
};