JavaScript原型结构和对象

时间:2012-10-20 02:33:36

标签: javascript object prototype typeerror

我是原型结构的新手,我很难搞清楚这个。这是我的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不是函数。我做错了什么?

3 个答案:

答案 0 :(得分:1)

如果要创建从inst对象继承的对象,可以使用Object.createvar 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对象继承的对象的变量。

答案 1 :(得分:0)

首先,inst未在Game的范围内定义。因此,引用this的{​​{1}}没有任何名为Game的属性。其次,inst后面必须跟inst表示对构造函数的调用,这是您在此处缺少的。

答案 2 :(得分: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);