⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20-5 “callee”和“caller”属性的应用.htm

📁 JAVASCRIPT完全自学手册,中源码的验证修订实例
💻 HTM
字号:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312" />
<title>20-5  “callee”和“caller”属性的应用</title>
<style>
* { font-size:12px; font-family:宋体, Arial; } /*规定了所有的字体样式*/
body { overflow:auto; }
</style>
<script>
//用于输出的函数
function print(str){ document.write(str+"<br>"); }
function println(){ document.write("<hr>"); }

//向字符串对象原型中增加方法“times”,用于将此字符串按指定次数重复的后返回
String.prototype.times = function(count){
    return(count<1?"":(new Array(count+1)).join(this));
}

//向数组对象原型中增加方法“indentJoin”,用于将此数组按顺序增加相应缩进,然后合并成一个字符串返回
Array.prototype.indentJoin = function(linkStr, indentChar, indentLen){
    var tmp = new Array();
    indentChar = indentChar || " ";
    indentLen = indentLen || 4;
    for(var i=0; i<this.length; i++){
        tmp.push(indentChar.times(i*indentLen)+this[i]);
    }
    return(tmp.join(linkStr));
}

//模拟函数之间的相互调用
function main(){ sub1(1, 3, 5, 7); }
function sub1(){ sub2(2, "hutia", 6, "humi"); }
function sub2(){ sub3(1, 1, 2, 3); }
function sub3(){ sub4("axiang", 8, "hutia", 21); }
function sub4(){
    try{
        //模拟一个错误
        var ss=tt;
    }catch(e){
        //在错误捕获中调用“debug”函数
        debug(e);
    }
}

//使用“callee”和“caller”属性自动获取调试信息
function debug(e){
    var f, fname, re, arg, depth;
    f = arguments.callee.caller;
    re = new Array();
    while(f){
        arg = new Array();
        fname = f.toString().match(/function\s+([^\(]+)/);
        fname = fname?fname[1]:"Anonymous";
        for(var i=0; i<f.arguments.length; i++)arg.push(toJString(f.arguments[i]));
        re.push("--&gt; "+fname+"("+arg.join(", ")+")");
        f = f.caller;
    }
    re.reverse();
    print("有一个错误发生");
    println();
    for(var i in e)print(i+":"+e[i]);
    println();
    print("错误发生位置:<br>"+re.indentJoin("<br>", "&nbsp;", 2));
}

//将对象序列化
function toJString(obj){
    switch(typeof(obj)){
        case "string": return("\""+obj+"\"");
        case "object": return("[object]");
        default: return(String(obj));
    }
}

//调用“main”函数
main();
</script>
</head>
<body>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -