js 查看被什么方法调用

function search(){
}
function baidu(){
search();
}
function google(){
search();
}
要是不传参,我想在 function search(){}里面知道我这个方法是被baidu()调用还是被google()调用,不知道JS有没这种功能,非常感谢
哦,果真没这种功能么,现在很是郁闷啊,很多方法里面都调用同一个方法,现在想统计页面上使用这些方法的次数,我想把这个统计写在这个公共的方法里面,通过switch控制具体是哪些方法。。实际引用这个方法的方法太多了,每个方法都加一句统计就多了点,。。大侠有好的建议吗?。。

恩,是这个效果。。。但不想在每个执行过search方法里面添加一行count++,有没什么奇妙的方法可以满足不改调用的方法元,直接在search里面去执行++操作呢?。。。

这个问题是可以办到的。

最关键的地方是获得调用者的名称,需要用到 arguments 对象读取 js 的调用栈。

function search(){
    // 以下两句是等效的
    alert(search.caller.name); 
    alert(arguments.callee.caller.name)
}
function baidu(){
    search();
}
function google(){
    search();
}

google();
baidu();

执行以上代码会分别得到 google 和 baidu。下面是对调用的对象分解解说:


name 和 caller 属性:

在 js(正确的名称应该是:ECMAScript) 里一切都是对象,变量就不用说了,连函数也是作为对象存在的。每个函数都有 name 和 caller 属性,name 属性返回函数的名称,而 caller 属性返回的是调用它的函数对象(是对象不是名称)。


arguments 对象及它的 callee 属性:

而函数在调用开始会生成一个 arguments 对象,这个对象不光能读取到转递给函数的参数,还能通过 callee 属性返回生成它的函数对象,在上面的例子中 arguments.callee == search 函数对象,使用 arguments.callee 的好处是当 search 函数改名也不会影响程序的正确性。


根据以上两条,不难得到 arguments.callee.caller.name 就是当前函数的调用者名称了

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-23
不传参数,判断调用元,这个好像不能实现。我做过的项目中也没有碰到过。
再者,既然你都知道传参可以做到,那为什么不用参数呢?
纠结于 JS是不是有这种功能,还不如用自己拿手的来得简单,快速。
实话实说咯。本回答被提问者采纳
第2个回答  2010-12-06
是这个效果不?

<input type="button" name="Submit" value="百度" onClick="baidu()">
<input type="button" name="Submit" value="谷歌" onClick="google()">
<script>
var bd=0;
var gg=0;
function search(){
alert("baidu() 方法被调用了 "+bd+"次\n"+"google() 方法被调用了 "+gg+"次");
}
function baidu(){
bd++;
search();
}
function google(){
gg++;
search();
}

</script>

js 查看被什么方法调用
最关键的地方是获得调用者的名称,需要用到 arguments 对象读取 js 的调用栈。function search(){ \/\/ 以下两句是等效的 alert(search.caller.name); alert(arguments.callee.caller.name)}function baidu(){ search();}function google(){ search();}google();baidu();执行以上代码...

js 怎么查看某个function被调用的情况?
function a(){alert(a.caller); \/\/ 打印函数a的调用函数}function b(){a()}b()

逆向 如何查看函数被哪些函数调用了
一个函数返回的值是拿来供另一个或其他多个函数使用的,一个函数里面返回的变量值只能在函数内部查看调用,返回值就提供了一个连接多个函数的通道。不然的话你得用全局变量,js里面用全局变量是很糟糕的 js里面时不能像你这样写法一次返回多个值的,只能返回x、y中的一个(其他很多语言这点都比js方便...

js 怎么判断一个function是否被调用
alert(a.caller); \/\/ 打印函数a的调用函数 } function b(){ a()} b()

JS怎么调用API接口
html编辑器、浏览器。1、首先,打开html编辑器,新建html文件,例如:index.html,引入jquery使用。2、在index.html的标签中,输入js代码:.get('请求地址', function(b) { document.body.innerText = b;});3、浏览器运行index.html页面,此时通过F12的开发者工具可知API接口被调用了。

js-getter
get语法用于将对象属性绑定到查询该属性时将被调用的函数。使用get语法定义属性时,可以实现动态计算值的访问或反映内部变量的状态,无需显式方法调用。在定义属性时,可以使用prop参数指定要绑定到给定函数的属性名,或者使用计算属性名的表达式绑定到给定函数。需要注意的是,虽然可以结合使用getter和setter来...

js获取多选框被选中的值(js获取选中的单选按钮)
首先用document.getElementsByName()这个方法,通过input标签的name属性将input元素获取,并存进obj这个变量值中。然后建一个check_val的数组,通过for循环将input标签的value值存入数组中,这样就可以获取checkbox的选中的多个值。JS获取多选框checkbox被选中的个数。varcheckbox=document.getElementsByName(likes[...

js中如何判断按钮是否被点击了?
("input[type='button']").bind('click',function() { alert("11"); });("button").bind('click',function() { alert("11"); });如果用的是INPUT的按钮用第一个 直接用BUTTON的话用第二个 这两个都是JQ的方法

如何判断页面某个js没有被加载
用document.onreadystatechange的方法来监听状态改变,然后用document.readyState == “complete”判断是否加载完成 代码如下:document.onreadystatechange = subSomething;\/\/当页面加载状态改变的时候执行这个方法.function subSomething(){ if(document.readyState == “complete”) \/\/当页面加载状态 myform....

JavaScript函数(javascript函数怎么定义)
javascript中函数调用的方法有几种?1、js中的函数有两种调用方式,一种是通过普通的声明之后进行的调用。一种是通过new关键字进行构造调用。普通的调用就是依次执行函数内部的函数语句,如果有返回值则返回返回值,如果没有则函数内部的声明周期结束。2、第三种用ClientScript类动态添加脚本用法如下:在想...

相似回答