Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript self.Rotate()不是prototype中的函数_Javascript - Fatal编程技术网

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.rotation
self
不是在类的函数中定义的,在函数开始时,您需要添加
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问题。让我为你找到它。它是:它基本上解释了
这个
关键字和它所有的奇妙之处。我问它是因为我没有找到任何关于它的东西。非常感谢链接和帮助!没问题:我很高兴我能帮上忙。