如何实现JavaScript设计模式
我正在寻找一种JS解决方案/设计模式,它允许通过在init()函数中绑定窗口加载事件多次调用函数C.Test.init()。不幸的是,我不能让它工作。有人能帮我吗如何实现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
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语句,将无法获得事件对象。查看我在之前的评论中给你的小提琴链接。