Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中命名对象属性的方法是一种好的做法吗?_Javascript_Function_Object_Anonymous Function - Fatal编程技术网

在JavaScript中命名对象属性的方法是一种好的做法吗?

在JavaScript中命名对象属性的方法是一种好的做法吗?,javascript,function,object,anonymous-function,Javascript,Function,Object,Anonymous Function,我听说为匿名函数命名有助于调试 JQuery: $( "p" ).on( "click", function clickHndlr() { /* body...*/ }); var EventEmitter = require('events').EventEmitter, emitter = new events.EventEmitter(); emitter.on('customEvent', function customEventHndlr (message,

我听说为匿名函数命名有助于调试

JQuery:

$( "p" ).on( "click", function clickHndlr() {
    /* body...*/
});
var EventEmitter = require('events').EventEmitter,
    emitter = new events.EventEmitter();

    emitter.on('customEvent', function customEventHndlr (message, status) {
        /* body...*/
    });
button.addEventListener('keypress', function buttonHndlr() {
    /* body...*/
});
节点:

$( "p" ).on( "click", function clickHndlr() {
    /* body...*/
});
var EventEmitter = require('events').EventEmitter,
    emitter = new events.EventEmitter();

    emitter.on('customEvent', function customEventHndlr (message, status) {
        /* body...*/
    });
button.addEventListener('keypress', function buttonHndlr() {
    /* body...*/
});
香草JS:

$( "p" ).on( "click", function clickHndlr() {
    /* body...*/
});
var EventEmitter = require('events').EventEmitter,
    emitter = new events.EventEmitter();

    emitter.on('customEvent', function customEventHndlr (message, status) {
        /* body...*/
    });
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...*/}
对。这里也有同样的好处


然而,引擎/调试器正变得越来越智能化,并将通过它们所属的对象属性的键隐式地命名函数。ES6甚至要求(检查)。但是,如果您使用的是ES6,那么您可能使用的是:-)

同样的东西。当查看堆栈跟踪时,如果您不给它命名,它很可能只会说类似于
匿名函数的话。是否命名所有函数以便在堆栈跟踪中看到它们的名称取决于您。有些人知道,有些人不知道。如果一个匿名函数有一个名字,它就不再是匿名的了,是吗?我想说的是,这种好处已经消失了,因为这些方法最终都不是匿名的。只是写一个答案,说同样的话。如果您使用浏览器内调试器,那么如果它命名为vs anonymous,则不应该有进一步的信息。如果你觉得他们需要名字,就给他们起名字,否则你不必。@Turk的确-如果他们需要名字,就给他们起名字。我要说的是,在OP的例子中,各种各样的错误处理程序实际上并没有那么有价值。在堆栈跟踪中,您已经能够看到一个名为函数的事件,它显然是一个处理程序(或hndlr)。解释这一点并不遥远。
i++//inrelease i by 1
——它重复了已知的信息。说它是“单击”或“自定义事件”处理程序并不能澄清任何事情。@vlaz这对于本机事件(在“香草”示例中)可能是正确的,但对于jQuery或节点的事件发射器来说可能不是那么明显。一个熟悉的名称有助于了解您自己的代码在调用堆栈中的何处被调用。