Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向对象文本中定义的对象构造函数添加原型_Javascript - Fatal编程技术网

Javascript 向对象文本中定义的对象构造函数添加原型

Javascript 向对象文本中定义的对象构造函数添加原型,javascript,Javascript,嘿,我在里面有一个对象构造函数方法和对象文本,我为构造函数定义了一个原型,如下所示 objectLiteralKey:(function() { var f=function() { ... }; f.prototype=ObjectInstance; return f; }()), //inside an object literal 是否有任何理由应该避免这种定义原型的模式?或者另一种更好的方式 编辑:顺便说一下,对象文字位于保存

嘿,我在里面有一个对象构造函数方法和对象文本,我为构造函数定义了一个原型,如下所示

objectLiteralKey:(function()
{
    var f=function()
    {
        ...
    };

    f.prototype=ObjectInstance;

    return f;
}()),
//inside an object literal
是否有任何理由应该避免这种定义原型的模式?或者另一种更好的方式

编辑:顺便说一下,对象文字位于保存laserPrototype的自调用函数中,我将其放在那里,因为还有另一个“敌人”需要相同的原型

完整代码

是否有任何理由应该避免这种定义原型的模式

不,也许除了可读性

或者另一种更好的方式

我认为代码中有太多不必要的直接调用的函数表达式,您可以忽略它们。最好将构造函数放在原型之前:

var laser = (function () {
    var eLasers = []; // local variable declarations
    var pLasers = []; // for encapsulation

    function Player() {
        this.x = window.player.x; // wait, what? Maybe parameters
        this.y = window.player.y; // would fit better.
        pLasers.push(this);
        this.destroy = function () {
            pLasers.splice(pLasers.indexOf(this), 1);
        }
    }
    function Enemy() {
        …
    }
    // here, Player.prototyp !== Enemy.prototype
    // but I don't think that is really necessary
    Player.prototype.draw = Enemy.prototype.draw = function() {
        ctx.beginPath();
        ctx.arc(this.x, this.y, 5, 0, 2 * Math.PI);
        ctx.stroke();
    };

    return {
        enemy: Enemy,
        player: Player,
        step: …
    }
}())

什么是eLasers?敌方是其一部分的对象文字是什么,它是单例的吗看到你的编辑,如果你能把这个自调用函数放在那里就好了(并用ellipis替换掉不必要的部分…)kk,我删掉了不重要的部分