2011-04-25 43 views
1

我试图分配一个事件处理程序我已经在Mootools的创建一个类,但我似乎无法访问任何我为班级创建的变量。像这样:迷惑,对使用Mootools的与“本”关键字

var newPerson = new Class({ 
initialize: function(name) 
{ 
    this.firstName = name; 
    //-------Creating Div----------// 
       ........... 
    //--------Created Div----------// 
    $(this.newDiv.id).click(function() 
    { 
     alert("clicked"); 
    }; 
}; 

现在,当我改变功能,以提醒指定的名称alert(this.firstName);对象它不访问它们,我不能找出原因。

任何人都可以点我的方向是正确的。

谢谢。

+1

您似乎使用的mootools + jQuery的一个奇怪的组合。你的课是mootools,但dom事件是jquery。看起来不太清楚 - 如果可能的话,你应该坚持在课堂上使用mootools代码。如果类是所有使用mootools的,那么只需抓取http://www.moo4q.com/ - 用于jquery的mootools类。 pointy的保留参考的答案可以正常工作。如果你想点click事件一类方法(清洁剂),那么你就可以'this.newdiv.addEvent(“点击”,this.handleClick.bind(本))'在本地mootools的。 – 2011-04-25 13:11:51

回答

2

在“初始化”功能的顶部,添加一个变量声明:

var thisObj = this; 

现在,在你的处理器,你应该能够做到:

alert(thisObj.firstName); 

通过隐藏this为当“初始化”函数开始时,它提供了一种方式让“click”处理程序获取原始对象。在处理程序中,this将引用与该事件有关的DOM元素。 (实际上,我猜测,因为我不是很熟悉MooTools的。)

+1

这是正确的,范围将是'event.target'元素,除非你使用'function.bind()' - 小心'$()'返回的jQuery寿。 '$(this.newDiv).click(function(){...} .bind(this));'也可以正常工作。 – 2011-04-25 13:14:38

+0

@Dimitar - 由'this'关键字所引用的对象不是范围,它们是完全不同的东西。 – RobG 2011-04-25 14:09:01

+0

是的,约定,这只是一个上下文对象指针,它可能是全局对象(窗口),类实例或此处的元素指针。因为它是一个函数,它会得到一个依赖于上下文的作用域链,并且“this”不直接相关,因为作用域链中的变量与它无关。干杯 – 2011-04-25 16:06:57