通过另一个javascript文件添加到函数

通过另一个javascript文件添加到函数,javascript,function,object,canvas,Javascript,Function,Object,Canvas,嘿,我在想我怎样才能添加到我的函数draw();draw在我的画布引擎中用于更新其中的所有内容。我想做的是创建一个独立的引擎,可以说它可以不被编辑,但可以更新与它链接的全新内容。比如说- function draw(){ gameloop(); cameraWrapper(); context2D.clearRect(0,0,canvas.width, canvas.height); } 现在假设我创建了一个新的应用程序并使用这个引擎。。我希望能够创建一个链接到引擎的独

嘿,我在想我怎样才能添加到我的函数draw();draw在我的画布引擎中用于更新其中的所有内容。我想做的是创建一个独立的引擎,可以说它可以不被编辑,但可以更新与它链接的全新内容。比如说-

function draw(){
    gameloop();
    cameraWrapper();
    context2D.clearRect(0,0,canvas.width, canvas.height);
}
现在假设我创建了一个新的应用程序并使用这个引擎。。我希望能够创建一个链接到引擎的独立文件,比如一个播放器对象

player = new object();
function playerupdate(){
     stuff;
     stuff;
}

现在,我怎么说在不编辑engine.js文件的情况下将playerupdate()函数添加到engine.js的draw()函数中呢?这会像一个原型吗?如果是这样的话,即使不是这样的话,我们也将不胜感激

如果您有任何问题,请提前询问,

谢谢

基本上这是一个原型。如果您不想让原型化复杂化,可以使用“自制”继承:

  Function.prototype.method = function(name, func) {
        this.prototype[name] = func;
        return this;
    };

  Function.method('inherits', function(parent) {
        var d = {}, p = (this.prototype = new parent());
        this.method('uber', function uber(name) {
            if(!( name in d)) {
                d[name] = 0;
            }
            var f, r, t = d[name], v = parent.prototype;
            if(t) {
                while(t) {
                    v = v.constructor.prototype;
                    t -= 1;
                }
                f = v[name];
            } else {
                f = p[name];
                if(f == this[name]) {
                    f = v[name];
                }
            }
            d[name] += 1;
            r = f.apply(this, Array.prototype.slice.apply(arguments, [1]));
            d[name] -= 1;
            return r;
        });
        return this;
    });

现在对于一个“类”(js中没有这样的东西,但这是正确的术语),您可以使用myCls使它继承另一个“类”。inherits(parentCls)

基本上,它是一个原型。如果您不想让原型化复杂化,可以使用“自制”继承:

  Function.prototype.method = function(name, func) {
        this.prototype[name] = func;
        return this;
    };

  Function.method('inherits', function(parent) {
        var d = {}, p = (this.prototype = new parent());
        this.method('uber', function uber(name) {
            if(!( name in d)) {
                d[name] = 0;
            }
            var f, r, t = d[name], v = parent.prototype;
            if(t) {
                while(t) {
                    v = v.constructor.prototype;
                    t -= 1;
                }
                f = v[name];
            } else {
                f = p[name];
                if(f == this[name]) {
                    f = v[name];
                }
            }
            d[name] += 1;
            r = f.apply(this, Array.prototype.slice.apply(arguments, [1]));
            d[name] -= 1;
            return r;
        });
        return this;
    });

现在对于一个“类”(js中没有这样的东西,但这是正确的术语),您可以使用myCls使它继承另一个“类”。inherits(parentCls)

我认为继承对于这个来说有点太复杂了。。。你可以用钩子实现你想要的一切

试着这样做:

var postDrawHooks = [];
var draw = function(){
    // do stuff
    postDrawHooks.forEach(function(hook){hook()});
}

var playerUpdate = function(){...};
postDrawHooks.push(playerUpdate);

我认为继承对于这个来说有点太复杂了。。。你可以用钩子实现你想要的一切

试着这样做:

var postDrawHooks = [];
var draw = function(){
    // do stuff
    postDrawHooks.forEach(function(hook){hook()});
}

var playerUpdate = function(){...};
postDrawHooks.push(playerUpdate);

是否存在无法为这些框架操作触发事件的原因?这样,任何收听“抽签”事件的人都可以用这种方式勾住他们的逻辑?如果不是实际的事件,像@sudhir jonathan建议的钩子一样的东西会起作用,尽管我建议创建一个注册泛型钩子的方法,这样你可以调用

game.register('draw',myFunctionReference);
和游戏中的对象

register : function (hook,func) {
    registeredHooks.push({'name' : hook, 'callback': func});
}
抽签:

function draw(){
    gameloop();
    cameraWrapper();
    context2D.clearRect(0,0,canvas.width, canvas.height);
    for (i=0; i < registeredHooks.length; i++) {
        var hook = registeredHooks[i];
        if (hook.name == 'draw') hook.callback();
    }
}
函数绘图(){
gameloop();
摄像师();
clearRect(0,0,canvas.width,canvas.height);
对于(i=0;i
是否存在无法为这些框架操作触发事件的原因?这样,任何收听“抽签”事件的人都可以用这种方式勾住他们的逻辑?如果不是实际的事件,像@sudhir jonathan建议的钩子一样的东西会起作用,尽管我建议创建一个注册泛型钩子的方法,这样你可以调用

game.register('draw',myFunctionReference);
和游戏中的对象

register : function (hook,func) {
    registeredHooks.push({'name' : hook, 'callback': func});
}
抽签:

function draw(){
    gameloop();
    cameraWrapper();
    context2D.clearRect(0,0,canvas.width, canvas.height);
    for (i=0; i < registeredHooks.length; i++) {
        var hook = registeredHooks[i];
        if (hook.name == 'draw') hook.callback();
    }
}
函数绘图(){
gameloop();
摄像师();
clearRect(0,0,canvas.width,canvas.height);
对于(i=0;i
谢谢这正是我需要的!嘿,我在玩这个,但是像摄影师说唱歌手(球员)那样呢?出于某种原因,如果函数的括号中有(player)之类的东西,它就不会让我推这个?有什么想法吗?您可以将钩子签名更新为
postDrawHooks.forEach(函数(钩子){hook(播放器)})
并在函数中接受该参数<代码>var playerUpdate=函数(播放器){…}谢谢这正是我需要的!嘿,我在玩这个,但是像摄影师说唱歌手(球员)那样呢?出于某种原因,如果函数的括号中有(player)之类的东西,它就不会让我推这个?有什么想法吗?您可以将钩子签名更新为
postDrawHooks.forEach(函数(钩子){hook(播放器)})
并在函数中接受该参数<代码>var playerUpdate=函数(播放器){…}我还不太明白这个。。。一般来说,我对javascript和编程相当陌生,但我想我很快就会需要它,并且会记住这一点!非常感谢。我还不太明白这个。。。一般来说,我对javascript和编程相当陌生,但我想我很快就会需要它,并且会记住这一点!非常感谢。