这种方法有方法吗?

时间:2015-08-01 22:28:35

标签: javascript

我对我遇到的一些代码有几个问题。您不需要了解框架或它的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();

由于

2 个答案:

答案 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),并且您所做的任何更改,库/框架也都可以识别。