今天工作中遇到一個問題,就是平時獲取一個ev(event)對象時候一般直接在調用方法里面寫一個ev參數,即可直接拿到這個對象,但是有時候會遇到函數調用不是直接加在一個dom對象的后面,如:
var oDiv = document.getElementById('box');
oDiv.onclick = function(ev) {
var x = ev.pageX;
...
};
而是寫在函數屬性中,如:
var oDiv = document.getElementById('box');
oDiv.setAttribute('onclick','fn()');
function fn() {
};
這個時候是無法直接在函數里面傳參的,只能通過如下方式獲取該對象
function fn() {
var ev = arguments.callee.caller.arguments[0];
1.當函數被調用時,它的arguments.callee對象就會指向自身,也就是一個對自己的引用。
由於arguments在函數被調用時才有效,因此arguments.callee在函數未調用時是不存在的(即null.callee),且解引用它會產生異常。
2.在一個函數調用另一個函數時,被調用函數會自動生成一個caller屬性,指向調用它的函數對象。如果該函數當前未被調用,或並非被其他函數調用,則caller為null。
};