0

大家好,假设我有这个:

function example()
{
   this.x = 0;
   this.y = 32;
   this.example2 = function()
   {

   }
}

我如何能够从 example2 中访问 example.x/example.y?

我问是因为我正在创建我的第一个“真正的”html5 游戏,并且我计划在该对象(玩家、敌人等)中拥有一个大型游戏对象和“模型”。除非有更好的方法来做到这一点......我已经完成了工作原型,但它们都在一个文件中并且没有真正结构化。

4

3 回答 3

1

像这样:

function example()
{
   this.x = 0;
   this.y = 32;
   this.example2 = function()
   {
      console.log(this.x); // 0
   }
}
于 2013-07-03T15:49:20.910 回答
1

如果您反对只计划有 1 个父母,您可以这样做:

function example() {
   this.x = 0;
   this.y = 32;
   this.example2 = new function() {
       this.parent = undefined;
   }
   this.example2.parent = this;
}

var firstobject = new example();

// Saving a reference to example2.
var example2Object = firstobject.example2;

// Because of parent variable, you can access example2 parent without needing to have the parent object in a variable.
console.log(example2Object.parent.x);
console.log(example2Object.parent.y);

有很多设置方法parent,这只是一个例子。

于 2013-07-03T15:49:36.567 回答
0

如果你希望你的方法在单独使用时仍然引用它们的原始对象,你需要一个闭包:

function example()
{
   this.x = 0;
   this.y = 32;

   this.example2 = proxy(this, function() {
       console.log(this.x);
   });
}

var x = new example(),
fn = x.example2; // isolate method

fn(); // this will still work

它使用这个辅助函数将函数绑定到一个对象:

// helper function to bind fn to ctx (context)
function proxy(ctx, fn)
{
    return function() {
        return fn.apply(ctx, arguments);
    }
}
于 2013-07-03T16:04:24.877 回答