1.函数的caller属性
(1)、区分函数是在函数体调用还是顶层代码中调用:顶层中调用函数,该函数的caller属性返回null,在函数中调用,会返回调用发i函数的函数;
<script> function testFun(){ if(testFun.caller === null){ document.write('在顶层中调用'); }else{ document.write('在h函数中调用'); document.write('在' + testFun.caller.name + '中调用'); } } /*直接调用*/、 testFun(); /*函数中调用*/ funtion test(){ testFun(); }
</script>
2.Arguments的callee属性
(1)、使用Arguments的callee属性来匿名递归调用函数
<script> function outNum(x,y){ document.write(x + <br>); if(x < y){ x ++; return arguments.callee(x,y); } else if(x > y){ y --; return arguments.callee(x,y); } else{ return } } /*调用*/、 outNum(9,4) </script>
3.函数的apply()方法和call()方法
(1)、语法:funName.call(this[,arg1[,arg2....]]);
funName.apply(this,[arg1,arg2....]);apply方法后面的参数以数组的额形势传递
<script> function range(_price){ if(typeof(_price) != 'number'){ this._price = 1000; }else{ if(_price >1000){ this._price = 1000; }else{ this._price = _price; } } } /*aplly写法*/ function Monitor(_price, _name)){ this.name = _name; range.aplly(this,arguments); } /*call写法 function Monitor(_price, _name)){ this.name = _name; range.call(this,_price); }
*/
Monitor.prototype = new range(); var Monitor1 = new Monitor('c1',800); document.write(monitor1.name,monitor.price); </script>