2017-10-06 161 views

回答

3

箭头函数表达式最适合非方法函数。看来你想sayHi使用objname财产。因此,您希望使用sayHi作为方法, ,在这种情况下,箭头函数不适用于此目的。

如果您改变箭头函数表达式匿名函数, 那么你可以使用this.name来指代对象的name属性上,您将调用sayHi功能:

obj = { 
    name: "John", 
    sayHi: function() { 
     console.log("Hi " + this.name); 
    }  
} 
obj.sayHi(); // prints "Hi John" 

一个很好的资源关于箭头函数表达式是developer.mozilla.org上的这个页面。

+0

为什么“这个,obj.name”不会工作? –

+0

@WaterfrVilla在您的环境中,当在箭头函数表达式中使用时,this'是未定义的。这可能发生在严格模式下。这是一项安全功能。你不应该在箭头函数表达式中使用'this',它们不是为这个用例设计的。 – janos

+0

@WaterfrVilla你需要更多的帮助吗? – janos

0

你不必像@janos说的那样使用匿名函数。当你使用箭头功能,this是指你的对象是在定义的类或上下文所以,你可以通过调用this.obj.name像这样调入名:

obj = { 
    name:"John", 
    sayHi:()=>{ 
     console.log("Hi " + this.obj.name); 
    } 

} 
obj.sayHi(); 
+0

没有工作!同样的错误信息:TypeError:无法读取未定义的属性'name' –

+0

btw我的不好,我不得不提到我的脚本是在nodejs中。你的建议可能适用于js –

+0

这只有在你分配给'this.obj'而不是'obj'时才有效。但即使如此,只有在原始上下文中定义了“this”时。此外,这个答案试图通过引入另一个不相关的隐含的'this'上下文来回答关于函数与箭头函数的隐式'this'上下文的问题。 –