2012-07-27 83 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