Javascript self.Rotate()不是prototype中的函数
我一直在研究其他与我类似的问题,但我似乎找不到答案 我遇到的错误也出现在标题中:Javascript self.Rotate()不是prototype中的函数,javascript,Javascript,我一直在研究其他与我类似的问题,但我似乎找不到答案 我遇到的错误也出现在标题中: Uncaught TypeError: self.Rotate() is not a function 以下是发生这种情况的完整代码: var Card = function(renderer, stage) { var self = this; self.name = "None"; self.health = 5; self.renderer = renderer;
Uncaught TypeError: self.Rotate() is not a function
以下是发生这种情况的完整代码:
var Card = function(renderer, stage) {
var self = this;
self.name = "None";
self.health = 5;
self.renderer = renderer;
self.stage = stage;
self.sprite = null;
PIXI.loader.add("FirePlace/GW2-Logo.jpg").load(self.Setup);
};
Card.prototype.Setup = function() {
self.sprite = new PIXI.Sprite(PIXI.loader.resources["FirePlace/GW2-Logo.jpg"].texture);
console.log(self.stage);
self.stage.addChild(self.sprite);
console.log("Sprite loaded");
self.renderer.render(self.stage);
self.Rotate();
};
Card.prototype.SetName = function(name) {
self.name = name;
};
Card.prototype.Rotate = function() {
requestAnimationFrame(self.Rotate);
if (self.sprite === null)
console.log("Sprite is null");
if (self.sprite !== null && self.sprite.rotation <= 1.5708)
self.sprite.rotation += 0.03;
self.renderer.render(self.stage);
};
var-Card=函数(渲染器,舞台){
var self=这个;
self.name=“无”;
自我健康=5;
self.renderer=渲染器;
self.stage=stage;
self.sprite=null;
PIXI.loader.add(“FirePlace/GW2 Logo.jpg”).load(self.Setup);
};
Card.prototype.Setup=函数(){
self.sprite=new PIXI.sprite(PIXI.loader.resources[“FirePlace/GW2 Logo.jpg”].texture);
控制台日志(self.stage);
self.stage.addChild(self.sprite);
控制台日志(“精灵加载”);
self.renderer.render(self.stage);
self.Rotate();
};
Card.prototype.SetName=函数(名称){
self.name=名称;
};
Card.prototype.Rotate=函数(){
requestAnimationFrame(self.Rotate);
if(self.sprite==null)
log(“精灵为空”);
如果(self.sprite!==null&&self.sprite.rotation在Card.prototype.Setup
中,以及以后添加到Card.prototype
中的其他方法,self
是window.self
,因为var
是私有的,而不是构造函数从原型对象继承的属性的一部分。更改self
到此
或卡
(如果您希望绑定上下文)中,以用于您所查找的上下文。我发现此代码可以防止您遇到的addChild问题。请查看代码中的注释以获取解释
var Card = function(renderer, stage) {
var self = this;
self.name = "None";
self.health = 5;
self.renderer = renderer;
self.stage = stage;
self.sprite = null;
var x = function(){
self.Setup.apply(self,arguments);
}
PIXI.loader.add("FirePlace/GW2-Logo.jpg").load(x); // origionally: PIXI.loader.add("FirePlace/GW2-Logo.jpg").load(self.Setup);
// self would not be defined in whatever other context it is used in when it is called. All I had to do was wrap it in a function and it was fixed
};
Card.prototype.Setup = function() {
var self = this;
self.sprite = new PIXI.Sprite(PIXI.loader.resources["FirePlace/GW2-Logo.jpg"].texture);
console.log("Stage is:",self.stage); // Now stage is defined since I wrapped this function in another function.
self.stage.addChild(self.sprite);
console.log("Sprite loaded");
self.renderer.render(self.stage);
self.Rotate();
};
Card.prototype.SetName = function(name) {
var self = this; // I also defined self = this in every single function :D
self.name = name;
};
Card.prototype.Rotate = function() {
var self = this;
var x = function(){
if (self.sprite === null)
console.log("Sprite is null");
if (self.sprite !== null && self.sprite.rotation <= 1.5708)
self.sprite.rotation += 0.03;
self.renderer.render(self.stage);
window.requestAnimationFrame(x);
}; // Same goes for this one.
window.requestAnimationFrame(x);
};
var-Card=函数(渲染器,舞台){
var self=这个;
self.name=“无”;
自我健康=5;
self.renderer=渲染器;
self.stage=stage;
self.sprite=null;
var x=函数(){
self.Setup.apply(self,参数);
}
PIXI.loader.add(“FirePlace/GW2 Logo.jpg”).load(x);//原始:PIXI.loader.add(“FirePlace/GW2 Logo.jpg”).load(self.Setup);
//当self被调用时,它不会在任何其他上下文中被定义,我所要做的就是将它包装在一个函数中,它是固定的
};
Card.prototype.Setup=函数(){
var self=这个;
self.sprite=new PIXI.sprite(PIXI.loader.resources[“FirePlace/GW2 Logo.jpg”].texture);
console.log(“Stage is:”,self.Stage);//现在定义了Stage,因为我将此函数包装到了另一个函数中。
self.stage.addChild(self.sprite);
控制台日志(“精灵加载”);
self.renderer.render(self.stage);
self.Rotate();
};
Card.prototype.SetName=函数(名称){
var self=this;//我还在每个函数中定义了self=this:D
self.name=名称;
};
Card.prototype.Rotate=函数(){
var self=这个;
var x=函数(){
if(self.sprite==null)
log(“精灵为空”);
如果(self.sprite!==null&&self.sprite.rotationself
不是在类的函数中定义的,在函数开始时,您需要添加var self=this;
在使用它之前定义它。此外,除非您有另一个函数闭包,否则您甚至不需要self,只需使用它。分配self是指如果您正在调用重新绑定this
@Dries的方法,您可以给我们一个提琴吗?请?不完全是保留字…您可以任意将其用作任何标识符。这只是因为此
不会从上下文中捕获(而且,还因为存在window.self
)由于window
是隐式的self
是window.self
如果没有分配给var
。当我尝试将self.Rotate()
更改为Card.Rotate()
或this.Rotate()时
我也得到了同样的结果error@Dries您是否尝试将self
的所有实例替换为this
?@ahitt6345如果我这样做,则会出现另一个错误(未找到addChild).这就是为什么最初将所有内容都更改为self
thingAmazing@ahitt6345,正如预期的那样。有没有解释为什么事情会如此困难?我通常是一名c#/c++程序员,每个函数中的var self=this
内容,然后原型函数中的函数真的没有意义对我来说。你刚才问的是另一个完整的stackoverflow问题。让我为你找到它。它是:它基本上解释了这个
关键字和它所有的奇妙之处。我问它是因为我没有找到任何关于它的东西。非常感谢链接和帮助!没问题:我很高兴我能帮上忙。