2012-07-27 79 views
0

我有一個基本的Drop事件處理程序如下所示:使用魔法E在擴展功能

function Drop(e){ 
    e.preventDefault(); 
    var data=e.dataTransfer.getData("Text"); 
    var child = $('[target_id="'+data+'"]').get(0); 
    e.target.appendChild(child); 
} 
function DropHandler(){} 
DropHandler.prototype={ 
     ... 
    Drop : Drop 
} 

創建一個新的對象,並擴展基本滴處理程序:

function AdminDropHandler(){} 
//Extend the DropHandler 
extend(AdminDropHandler,DropHandler); 
//Override Drop method in AdminDropHandler 
AdminDropHandler.prototype.Drop=function(){ 
    DropHandler.prototype.Drop.apply(this,arguments); 
    var parent_id = e.target.id;// not defined error 
    ... 
} 

它可以擴展功能DropHandler,但我使用的e似乎丟失。如何解決這個問題呢?

回答

2

您還沒有在任何地方的函數中定義e。嘗試定義它:

AdminDropHandler.prototype.Drop = function(e) { 
    DropHandler.prototype.Drop.apply(this, arguments); 
    var parent_id = e.target.id; // should work now 
}; 

你也可以做到這一點,儘管它不建議,因爲正式的參數做工作 就好:

AdminDropHandler.prototype.Drop = function() { 
    var e = arguments[0]; 
    DropHandler.prototype.Drop.apply(this, arguments); 
    var parent_id = e.target.id; // should work now 
}; 
+0

是不是在DropHandler.prototype.Drop?我將e傳遞給它。當我調用DropHandler.prototype.Drop.apply(this,arguments)時,它會擴展它嗎? – panda 2012-07-27 08:48:47

+0

@PandaYang你通過'arguments'隱式地傳入'e',它沒有在函數本身中定義。你可以使用'var e = arguments [0];'或者像我這樣的正式參數。調用某個其他函數不會在調用函數中定義變量。 – Esailija 2012-07-27 08:50:24

+0

我明白了,所以AdminDropHandler.Drop中的e變成了正確的參數[0]? – panda 2012-07-27 08:52:27