JavaScript命名对象函数
对JS来说是相当新的 使用具有函数的对象的简单示例:JavaScript命名对象函数,javascript,javascript-objects,Javascript,Javascript Objects,对JS来说是相当新的 使用具有函数的对象的简单示例: var person = { name: "Bob McBobson", talk: function descriptiveFunctionName() {alert("Hello");} }; 我注意到您可以命名对象函数(例如上面的descriptiveFunctionName) 是否有需要/有帮助而不是匿名的情况 是否有需要/有帮助而不是匿名的情况 从ES2015开始,即使您省略了descriptiveFunction
var person = {
name: "Bob McBobson",
talk: function descriptiveFunctionName() {alert("Hello");}
};
我注意到您可以命名对象函数(例如上面的descriptiveFunctionName)
是否有需要/有帮助而不是匿名的情况
是否有需要/有帮助而不是匿名的情况
从ES2015开始,即使您省略了descriptiveFunctionName
,您的函数也不会是匿名的,它会有一个名称(talk
)。ES2015最后添加了推断函数名(以及name
属性)。大多数情况下都会推断出名称,唯一没有推断出名称的真正重要位置是obj.foo=function(){}
(这使得函数名为”
,而不是“foo”
)
另外,如果函数将是递归的或以其他方式引用自身(将自身设置为事件处理程序等),则您可能更喜欢通过其名称(在其范围内)引用它
因此,添加该名称的原因:
obj.foo=function nameHere(){}您希望函数具有名称,而不是“
”
您可能希望这样做的另一个原因是,您可以稍后检索函数名。因此,如果您可以将变量分配给多个函数中的一个,然后想知道您分配了哪个函数,那么可以使用
.name
调用它
var parent={myFunc:undefined};
var rnd=Math.floor(Math.random()*3);
交换机(rnd){
案例0:parent.myFunc=函数减法(x){返回x-1;};中断;
案例1:parent.myFunc=函数add(x){return x+1;};break;
案例2:parent.myFunc=函数乘法(x){return x*2;};break;
}
console.log(parent.myFunc.name);//减法、加法或乘法
据我所知,descriptiveFunctionName
仅在函数本身内部可用。我说“这是我的理解”,因为我并不是100%同意这一点。您可以通过将警报更改为alert(descriptiveFunctionName)
@Amy来测试这一点-您是正确的(从ES2015开始,函数上的name
属性和堆栈跟踪)。javascript引擎使用函数名来生成更好的堆栈跟踪。这使得调试变得更容易。@snek在我的示例中看到一个答案,它建议将函数命名为“Talk”,你知道它是否会显示在堆栈中吗?@DogBoy-是的,在大多数现代引擎中。最终,可能在所有这些方面。