0

我是原型结构的新手,我很难弄清楚这一点。这是我的 JavaScript 代码。

var Game = function ()
{
   //some variables
};
Game.prototype.block = 
{
    spawn: function () {
        var t1 = new this.inst;
    },
    inst : {
        x: 5,
        y: 0,
        type: ''
    }
};

当我尝试创建一个新对象“inst”时,出现以下错误:TypeError: object is not a function。我做错了什么?

4

3 回答 3

1

如果要创建从对象继承的inst对象,可以使用Object.create, with 来实现var t1 = Object.create(this.inst);

var Game = function () {
   //some variables
};
Game.prototype.block =  {
    spawn: function () {
        var t1 = Object.create(this.inst);
    },
    inst : {
        x: 5,
        y: 0,
        type: ''
    }
};

那么你的代码看起来像这样;

var game = new Game();

game.block.spawn();

并且该.spawn()方法将具有一个引用从该Game.prototype.block.inst对象继承的对象的变量。

于 2012-10-20T15:23:38.133 回答
0

首先,inst没有定义在Game. 因此,thiswhich 指的Game是没有任何属性称为inst. 其次,inst必须跟在后面()表示对构造函数的调用,您在此处缺少该构造函数。

于 2012-10-20T02:35:54.430 回答
0

我来宾您需要一个静态工厂方法来创建新的“inst”。下面的代码是你需要的吗?你调用 Game.spawn 方法来生成一个新的 inst,你可以把这个方法放在 setInterval 中。

function Game() {
    //some variables
}

Game.spawn = function() {
    function Inst() {
        this.x = 5;
        this.y = 0;
        this.type = '';
    }

    return new Inst;
}

var inst1 = Game.spawn();
inst1.x = 1; //test inst1
console.log(inst1.x);
var inst2 = Game.spawn();
inst2.x = 2; //test inst2
console.log(inst2.x);
var inst3 = Game.spawn();
inst3.x = 3; //test inst 3
console.log(inst3.x);
于 2012-10-20T03:20:27.423 回答