我在ES6中学习词汇this
,我反驳了这个例子:
let person = {
name : 'Alex',
cars : ['Ferrari','Jaguar','Bugatti','Cadillac'],
toString : function(){
for(let car of cars){
console.log(`${this.name} has ${car}`)
}
}
}
person.toString();
所以让我说我想将toString函数转换为数组函数,所以我会这样:
let person = {
name : 'Alex',
cars : ['Ferrari','Jaguar','Bugatti','Cadillac'],
toString : () => {
for(let car of cars){
console.log(`${this.name} has ${car}`)
}
}
}
person.toString();
在此示例中cars
未定义,我为什么会这样做,以及如何在该示例中从cars
对象中调用person
。
同样如此:
let person = {
name : 'Alex',
cars : ['Ferrari','Jaguar','Bugatti','Cadillac'],
toString : () => {
cars.forEach(car => console.log(`${this.name} has ${car}`));
}
}
person.toString();
答案 0 :(得分:3)
第一个例子已经破了。
在此示例中
cars
未定义,为什么我得到
没有名称为cars
的变量。你是否使用箭头功能并没有什么不同。
如何在该示例中从
cars
对象中调用person
。
使用方法或函数表达式并使用this.cars
引用它:
let person = {
name : 'Alex',
cars : ['Ferrari','Jaguar','Bugatti','Cadillac'],
toString() {
for(let car of this.cars){
console.log(`${this.name} has ${car}`)
}
}
}
箭头函数不能用作实例方法,因为在实例方法中,您不需要词法this
。了解详情:Arrow function vs function declaration / expressions: Are they equivalent / exchangeable?
答案 1 :(得分:0)
由于您的箭头功能,this
适用于您所调用的函数的对象。
<强>正确强>
let person = {
name : 'Alex',
cars : ['Ferrari','Jaguar','Bugatti','Cadillac'],
toString : function() {
this.cars.forEach(car=>{
console.log(`${this.name} has ${car}`)
})
}
}
person.toString();
foreach
中的最后一个箭头功能适用于您的对象,为什么您不需要像this.cars.forEach(...)(this.name)
这样使用clourse。