为什么arguments.callee.caller在JavaScript中弃用了该属性?
它已添加,然后在JavaScript中弃用,但ECMAScript完全省略了它.某些浏览器(Mozilla,IE)一直支持它,并且在地图上没有任何计划来删除支持.其他人(Safari,Opera)已经采用了它的支持,但对旧浏览器的支持是不可靠的.
是否有充分理由将这些有价值的功能置于不确定状态?
(或者,有没有更好的方法来获取调用函数的句柄?)
console.trace()在控制台上输出结果.
我想将结果作为字符串并将它们保存到文件中.
我没有为函数定义名称,我也无法得到它们的名字callee.caller.name.
如何防止onclick方法中的默认值?我有一个方法,我也传递自定义值
<a href="#" onclick="callmymethod(24)">Call</a>
Run Code Online (Sandbox Code Playgroud)
function callmymethod(myVal){
//doing custom things with myVal
//here I want to prevent default
}
Run Code Online (Sandbox Code Playgroud) var test = {
demo: function(){
//get the caller context here
}
}
//when this gets called, the caller context should be window.
test.demo();
Run Code Online (Sandbox Code Playgroud)
我试过arguments.callee和arguments.callee.caller,并没有运气...
可以混合严格和非严格的代码.但即使对它的调用不是严格的代码,你也不能使用调用者.有人知道任何解决方法吗?
我试过这个:
(function strict(){
"use strict";
nonStrict();//ok
nonStrictCaller();//error :(
})();
function nonStrict(){
return 011;//Octal literals are not allowed in strict mode
}
function nonStrictCaller(){
return nonStrictCaller.caller;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的调试函数,只显示函数的调用者,如下所示:
function xe() {
console.log(xe.caller().name)
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我只能添加xe()一个函数,它将记录对函数的调用 - 只是一个简单的简单添加,以帮助调试.调试糖,可以这么说.
不幸的是我从主题行得到错误:
TypeError:'caller'和'arguments'是受限制的函数属性,在此上下文中无法访问.
我正在使用Babel/ES6,它注入"use strict"每个模块的顶部.这可能是原因,但搜索已经产生了有关错误引发原因的有限信息,我想更好地理解它.
如果严格模式是问题,我宁愿不为整个项目禁用严格模式 - 仅用于模块/功能.
可能重复:
Javascript如何找到调用函数?
嗨,大家好!
有没有办法this从调用当前函数的函数中获取值?看这个:
function TraceMySelf(){
console.log(this);
}
function A(){
TraceMySelf();
console.log(this);
}
var a = new A();
Run Code Online (Sandbox Code Playgroud)
执行此代码时,控制台首先显示window对象,然后显示a对象.如何让代码显示a对象两次,只更改第2行?我知道,我可以申请内的功能A有this,但那不是我想要的.
这可能吗?
谢谢你的帮助!
可能重复:
Javascript如何找到调用函数?
今天早上我正在尝试使用javascript/jQuery,并试图捕获当前正在执行的函数的调用者名称.
因此,在下面的示例中,日志将显示runMe为调用者和showMe被调用者.
jQuery(document).ready(function($) {
function showMe() {
// should log the runMe as the caller and showMe as callee
console.log('Callee: ',arguments.callee)
console.log('Caller: ',arguments.caller);
}
function runMe() {
// getting executed as a button is pressed.
showMe();
}
$('a').bind('click', function(e) {
e.preventDefault();
runMe();
});
});
Run Code Online (Sandbox Code Playgroud)
以上显然不起作用,因此我向大家提问.
在上面的例子中是否有一个很好的方法来获得调用者?
请注意:我知道我可以得到被调用者runMe并将其showMe作为参数传递但是这个问题的目标是一个不需要调用者"手动"传递给函数的解决方案.
有没有理由反对做这样的事情?
在框架中,我正在开发,我已经构建了机制,允许定义私有和受保护的属性和方法.
我在ES5规范中发现的唯一能力是使用arguments.callee,
如下所示:
descriptor.method = function () {
if (__callerIsProptected(arguments.callee.caller.caller, cls))
return value.apply(this, __defaults(_.values(arguments), defaults));
throw 'Attempt to call ' + access + ' method "' + cls._name + '::' + name + '"';
};
Run Code Online (Sandbox Code Playgroud)
至于在严格模式下调用arguments.callee和arguments.caller引起异常抛出是否有任何方便的替代方法呢?
更新 - 添加整个被调用的功能代码
function __descriptor(cls, type, name, descriptor, access) {
//protected private non-function descriptor.value is replaced by get/set pair
if (access !== 'public' && type == 'property') {
delete descriptor.value;
delete descriptor.writable;
_.isFunction(descriptor.get) || (descriptor.get = function () {
return this.__get(name);
});
_.isFunction(descriptor.set) …Run Code Online (Sandbox Code Playgroud) 我在JS中有一个函数,它从多个地方调用.
现在我在iPad上测试这个页面,因此发现调试有点困难.
我可以通过某种方式(在控制台上打印)从我的函数调用的位置找到吗?
javascript ×10
ecmascript-6 ×2
arguments ×1
console ×1
dom-events ×1
ecma262 ×1
firebug ×1
firefox ×1
jquery ×1
stack-trace ×1
strict ×1
strict-mode ×1