javascript传递给对象方法

时间:2014-09-17 21:03:45

标签: javascript

我正在调用一个方法,并希望使用 this 在方法外部引用一个对象精灵。

在对象中调用 this 仅提供传入的事件对象。我试图在moveSprite:function

中访问this.sprite
var roomMap = cc.Layer.extend({
    sprite:null,
    listener:null,

    ctor:function(){
        this._super();
        this.init();
    },

    init: function () {
        this._super();

        this.sprite = new cc.Sprite.create("#player-stand-f-0");
        this.sprite.setPosition(new cc.Point(300,300));
        this.addChild(this.sprite);

        this.listener = cc.EventListener.create({

            onMouseDown: function(event) {
                cc.log("onMouseDown");
            },
            onMouseUp: this.moveSprite
        });

        cc.eventManager.addListener(this.listener, this);

        return this;

    },

    moveSprite:function(event){
        cc.log("mouse up: "+event.getLocationX() + "mouse move: "+event.getLocationY());
        console.log(this);
        var sprite_action = cc.MoveTo(2,cc.p(event.getLocationX(),event.getLocationY()));
        this.sprite.runAction(sprite_action);
        this.addChild(sprite_action);
    }

});

1 个答案:

答案 0 :(得分:3)

除非您的cc库为您提供了一种特定的方法,否则一般的方法是使用ES5' Function#bind(可以使用shimmed在较旧的引擎上):

onMouseUp: this.moveSprite.bind(this)

Function#bind返回一个函数,该函数在调用时将调用原始函数,并将this设置为您给出的第一个参数bind。 (您还可以给bind个进一步的参数,这些参数将作为其初始参数传递给原始函数,然后是调用bind的" bound"函数时给出的任何参数。回报。)

因此,通过上面的一行,我们会说"创建并返回一个函数,该函数在被调用时会调用moveSprite并将this设置为this目前是,并将其分配给onMouseUp属性。"