为什么arguments.callee.caller在JavaScript中弃用了该属性?
它已添加,然后在JavaScript中弃用,但ECMAScript完全省略了它.某些浏览器(Mozilla,IE)一直支持它,并且在地图上没有任何计划来删除支持.其他人(Safari,Opera)已经采用了它的支持,但对旧浏览器的支持是不可靠的.
是否有充分理由将这些有价值的功能置于不确定状态?
(或者,有没有更好的方法来获取调用函数的句柄?)
正如arguments.callee将要弃用的那样,我将在下面的表达式中使用而不是arguments.callee`:
var self = this;
this.async(function(){
if(test()){
then();
}else{
self.async(arguments.callee);
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个EventListener,它监听整个文档并记录击键,但是我想在满足某些条件时删除这个监听器.
以下是我的代码片段:
document.addEventListener('keyup', function(e) {
var letter_entered = String.fromCharCode(e.keyCode).toLowerCase();
player.makeGuess(letter_entered);
if(player.win_status === true || player.lose_status === true) {
document.removeEventListener('keyup', arguments.callee, false);
}
});
Run Code Online (Sandbox Code Playgroud)
这是有效的,但根据Mozilla Developer Docs,此方法已被弃用.
我知道我可以简单地命名这个函数,但有没有替代方法可以让我继续使用未命名的函数?
如何从函数内部调用函数,使其变为递归?这是我的代码,我添加了一个注释,我想开始递归:
$('a.previous-photos, a.next-photos').click(function() {
var id = $('#media-photo img').attr('id');
var href = $(this).attr('href');
href = href.split('/');
var p = href[href.length - 1];
var url = '/view/album-photos/id/' + id + '/p/' + p;
$.get(url, function(data) {
$('.box-content2').replaceWith('<div class="box-content2"' + data + '</div>');
});
// here I want to call the function again
return false;
});
Run Code Online (Sandbox Code Playgroud) 是的,我知道有很多关于这个问题的线程,对于初学者:
不推荐使用Arguments.callee - 应该使用什么?
但是给出答案的问题是arguments.callee已被弃用.所有答案都说只是给你的功能一个名字.但是,据我所知,这并不能解决我的问题.说我有以下功能:
function blah() {
// arguments.callee.name is deprecated
console.log('The function name is: ' + arguments.callee.name + '.');
}
Run Code Online (Sandbox Code Playgroud)
但是因为它被弃用了,我不应该使用它,所以我应该使用什么呢?有什么办法可以在函数本身内部访问函数名,或者我只是出于概率吗?
如果它使事情变得更容易,我使用的是Ext JS框架,但我还没有找到一种了解函数名称的方法.如果没有,是否有jQuery方法?我在这里绝望.
javascript ×5
arguments ×2
jquery ×2
deprecated ×1
ecma262 ×1
extjs ×1
porting ×1
reflection ×1