2016-10-12 63 views
2

我听说你的匿名函数的名字有助于调试。在JavaScript中命名对象属性的方法是一种好的做法吗?

JQuery的:

$("p").on("click", function clickHndlr() { 
    /* body...*/ 
}); 

节点:

var EventEmitter = require('events').EventEmitter, 
    emitter = new events.EventEmitter(); 

    emitter.on('customEvent', function customEventHndlr (message, status) { 
     /* body...*/ 
    }); 

香草JS:

button.addEventListener('keypress', function buttonHndlr() { 
    /* body...*/ 
}); 

但怎么样的对象呢?

var starShipChecker = (function() { 
    var publicAPI = { 
    checkForWarpDrive : function(starShip){ 
     if(!starShip.hasOwnProperty('warpDrive')) { 
      starShip.warpDrive = undefined; 
      console.log('Your star-ship, the ' + starShip.name + ', now has warp-drive!' + 
      '\n' + 'Use the addWarpDrive method to apply the maximum warp relevant to your ship Class...'); 
     } else { 
      console.log('Your star-ship, the ' + starShip.name + ', has warp-drive already!' + 
      '\n' + 'But use the addWarpDriveMaxLevel method to apply the maximum warp relevant to your ship Class...'); 
     } 
    }, 
    addWarpDriveMaxLevel : function(){} 
    }; 
    return publicAPI; 

})(); 

你会得到同样的好处吗?或者它是不同的,因为它们是方法?

checkForWarpDrive : function checkWarpDriveLikeYouWereScotty(starShip){ /* body...*/}, 
addWarpDriveMaxLevel : function addWarpDriveLikeYouWereScotty(){ /* body...*/} 
+1

同样的事情。在查看堆栈跟踪时,如果您不指定名称,它很可能只会说'匿名函数'。无论您命名所有函数,以便您可以在堆栈跟踪中看到它们的名称取决于您。有些人会这样做,有些人不会。 –

+1

那么,如果一个匿名函数有一个名字,它不再是匿名的,是吗? – Feathercrown

+1

我想说,由于这些方法最终并不是匿名的,所以好处已经消失。 –

回答

4

是的。那里有同样的好处(and more)。

但是,引擎/调试器变得越来越智能,并且会通过它们所属的对象属性的键隐式地命名函数。 ES6甚至要求(检查.name property)。但是如果你使用的是ES6,你可能会使用method definition :-)

+1

只是写一个答案说同样的事情。如果你使用浏览器调试器,那么如果它被命名为匿名,它们就不应该提供更多的信息。如果你觉得他们需要一个名字,请命名他们,否则你不需要。 – Turk

+1

@Turk的确如此 - 如果他们需要一个名字,就将它们命名。我想说,在OP的情况下,各种拼写错误处理程序实际上并不是那么有价值。在堆栈跟踪中,您已经能够看到一个称为函数的事件 - 它很明显是一个处理程序(或hndlr)。解释说,离我不远'i ++ //把我的数字加1' - 它重复已知的信息。说这是一个“点击”或“自定义事件”处理程序没有澄清任何事情。 – vlaz

+1

@vlaz对于本地事件(在“vanilla”示例中)可能是正确的,但对于jQuery或Node的事件发射器可能并不那么明显。这里熟悉的名字有助于了解调用堆栈中您自己的代码被调用的位置。 – Bergi

相关问题