1.函數的caller屬性 (1)、區分函數是在函數體調用還是頂層代碼中調用:頂層中調用函數,該函數的caller屬性返回null,在函數中調用,會返回調用發i函數的函數; 2.Arguments的callee屬性 (1)、使用Arguments的callee屬性來匿名遞歸調用函數 3.函數的app ...
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>