试图使用MooTools和Raphael

时间:2011-04-25 15:11:45

标签: javascript jquery oop javascript-events mootools

我有以下代码没有按预期运行:

var person = new Class({
    initialize: function(name)
    {
        this.personName = name;
        alert(this.personName)        //WORKS :-)

        this.testFunc();              //WORKS :-)
        this.createShape();           //PAINTS SHAPE BUT CANNOT ACCESS 'personName'
    },
    testFunc() : function()
    {
        alert(this.personName);
    }, 
    createShape() : function()
    {
        this.personShape = paper.rect(40,40,40,40).attr({"fill":"blue"});
        $(this.personShape.node).click(function()
        {

            alert(this.personName);
        });
    }
});

警报不适用于click事件,我确实理解它,因为它无法访问对象变量'personName'。但是,我想知道是否可以通过某种方式访问​​它?

有没有一个简洁的小javascript技巧来实现这个目标?

感谢您的反馈。

1 个答案:

答案 0 :(得分:1)

click的{​​{1}}功能中,上下文设置为createShapethis.personShape.node不再引用您的this,因此需要对其进行缓存。试试这个:

person

此外,您的函数不应在类/对象定义中具有括号。此外,出于某些原因,最好开始将花括号放在与语句相同的行上。这是我的重构:

createShape: function() {
    var context = this;
    context.personShape = paper.rect(40,40,40,40).attr({"fill":"blue"});
    $(context.personShape.node).click(function() {
        alert(context.personName);
    });
}