我正在调用一个方法,并希望使用 this 在方法外部引用一个对象精灵。
在对象中调用 this 仅提供传入的事件对象。我试图在moveSprite:function
中访问this.spritevar 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);
}
});
答案 0 :(得分:3)
除非您的cc
库为您提供了一种特定的方法,否则一般的方法是使用ES5' Function#bind
(可以使用shimmed在较旧的引擎上):
onMouseUp: this.moveSprite.bind(this)
Function#bind
返回一个函数,该函数在调用时将调用原始函数,并将this
设置为您给出的第一个参数bind
。 (您还可以给bind
个进一步的参数,这些参数将作为其初始参数传递给原始函数,然后是调用bind
的" bound"函数时给出的任何参数。回报。)
因此,通过上面的一行,我们会说"创建并返回一个函数,该函数在被调用时会调用moveSprite
并将this
设置为this
目前是,并将其分配给onMouseUp
属性。"