我对我遇到的一些代码有几个问题。您不需要了解框架或它的API,因为我唯一的问题是更好地理解某些概念。
我理解在下面的行中,变量polygonCollisionSpite被赋予了game.add.sprite()的返回值,我假设它是一个对象。
var polygonCollisionSprite = game.add.sprite(400,128,'check');
让我感到困惑的是方法链接似乎是什么?我理解像game.add()这样的常规方法但是game.add.sprite(),它在对象中看起来如何? this.game.add.sprite = function(){}?
然后我也遇到了
scoreText = game.add.text(10, 10, 'Hit Space to Restart Demo');
scoreText.font = 'Arial Black';
scoreText.fontSize = 16;
scoreText.stroke = '#000';
scoreText.strokeThickness = 3;
scoreText.fill = '#fff';
这看起来像属性被添加到返回的对象并分配给" scoreText"。如何在不使用.prototype方法的情况下添加属性?
返回scoreText的对象可能是什么样的?
最后,一个不相关但简单的问题:将一个已触发函数分配给变量的好处是什么:
myvar = test();
由于
答案 0 :(得分:1)
让我感到困惑的是看似方法的链接?
那里没有链接。
链接是指方法返回this
时,foo.bar().baz()
的值foo
的值为this
。
game.add.sprite(400,128,'check');
这只是访问对象的属性。
对象可以具有属性:
someObject.someProperty
该属性可以具有值
someObject.someProperty = someOtherObject;
该值可以是一个对象,它可以有自己的属性。
这看起来属性被添加到返回的对象并分配给" scoreText"。
返回的对象已分配给scoreText
。然后将属性添加到该对象。
如何在不使用.prototype方法的情况下添加属性?
当从构造函数创建new
对象时,向原型对象添加属性使它们在继承链中可用。
您可以向任何对象添加属性。
大多数为某些东西添加属性的JavaScript会直接对象进行操作,并且不会触及原型对象。
var myPeople = {};
myPeople.john = { name: "John Smith", address: "27 Witherson Ave" };
myPeople.daisy = { name: "Daisy Mannors", address: "19 Cumberbund Rd" };
返回scoreText的对象可能是什么样的?
您提供的代码中没有任何内容可以帮助我们推断出这一点。 (然后是您之后明确添加的属性。)
最后,一个不相关但简单的问题:将一个被激活的函数赋值给变量的好处是什么
与使用变量完全相同。你可以重复使用它,你可以改变它,你不需要输入每次你想要使用它时重新创建它所需的一切。
答案 1 :(得分:0)
我认为这里发生的是game.add.sprite
,其工作原理如下:
game.add.sprite = function (options) {
// create instance of Sprite
var inst = new Sprite(options);
// add inst to some entity pool
game.objects.push(inst);
// return for use
return inst;
};
这样,您和库/框架都可以访问此对象(inst),并且您所做的任何更改,库/框架也都可以识别。