Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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_Jquery_Design Patterns - Fatal编程技术网

如何实现JavaScript设计模式

如何实现JavaScript设计模式,javascript,jquery,design-patterns,Javascript,Jquery,Design Patterns,我正在寻找一种JS解决方案/设计模式,它允许通过在init()函数中绑定窗口加载事件多次调用函数C.Test.init()。不幸的是,我不能让它工作。有人能帮我吗 var C = {}; C.Test = (function(C) { var me = {}; me.init = function(config) { me._config = config; $(windo

我正在寻找一种JS解决方案/设计模式,它允许通过在init()函数中绑定窗口加载事件多次调用函数C.Test.init()。不幸的是,我不能让它工作。有人能帮我吗

    var C = {};

    C.Test = (function(C)
    {
        var me = {};

        me.init = function(config)
        {
            me._config = config;
            $(window).bind('load.' + config.name, me, me.sayHello);
        }

        me.sayHello = function(e)
        {
            // this doesn't work:
            document.write('HELLO ' + me._config.name + '<br>');

            // this doesn't work either:
            document.write('SALVE ' + e.data._config.name + '<br>');
        }

        return {
            init : me.init
        }

    })(C);

    C.Test.init({
        name: 'John'
    });

    C.Test.init({
        name: 'Kate'
    });
var C={};
C.测试=(函数(C)
{
var me={};
me.init=函数(配置)
{
me._config=config;
$(window.bind('load.'+config.name,me,me.sayHello);
}
me.sayHello=函数(e)
{
//这不起作用:
document.write('HELLO'+me.\u config.name+'
'); //这也不起作用: document.write('SALVE'+e.data.\u config.name+'
'); } 返回{ init:me.init } })(C) ); C.Test.init({ 名字:“约翰” }); C.Test.init({ 姓名:“凯特” });

以下是JS Fiddle链接:

对我来说似乎是一个收尾问题


看看这个。

为什么要将它标记为jQuery?您想要jQuery解决方案吗?因为我正在使用jQuery绑定加载事件。jquery中的一个解决方案也就足够了。如果你想将数据添加到event.data中,那么你必须执行如下操作:
$(window.bind('load'.+config.name,function(c){return function(e){e.data=c;me.sayHello.call(this,e);}(config))原因是您正在使用单例或更确切地说是一个对象来访问数据,并且在触发窗口的加载时_配置已更改,并且旧的数据引用已被覆盖。这里的小提琴链接很棒。谢谢你@Sushil!还有一个问题:真的需要“回报”吗?santacruz不,在你的场景中它是不需要的,但在某些情况下它是需要的,所以它是以个案为基础的。但是,如果删除return语句,将无法获得事件对象。查看我在之前的评论中给你的小提琴链接。