JavaScript设计模式,正在覆盖一个函数

时间:2012-07-16 02:02:26

标签: javascript jquery

我不熟悉js设计模式。现在我进入了一个问题。希望你们能帮助我。谢谢你提前。

代码在这里:http://jsfiddle.net/nNdna/ 实时页面位于:http://www.sumsy.com/demos/socialFeeds/

请转到实际页面并检查调试器。您应该会在日志中看到“pinterest init”。但是我期待“twitter init”出现在日志中,因为我从主函数中调用了Twitter.init。

我的设置是: 有2个匿名自执行函数,两者都有

内的init函数
var Twitter = (function($, window){ ... init = function ... 
var Pinterest = (function($, window){ ... init = function ... 

然后从我的main函数,我调用了Twitter.init(user_twitter_options);

但似乎Pinterest.init实际上被调用了。 它看起来像Pinterest.init覆盖了Twitter.init函数。

谁能告诉我有什么问题?我不应该有2个匿名自执行函数吗?

先谢谢。

2 个答案:

答案 0 :(得分:3)

小提琴中的代码存在很多问题。

TwitterPinterest都被分配给调用匿名函数的结果,这些函数返回this this将等于window,因为你不是实际上是使用new创建新对象,或以其他方式做任何事情来设置this

在两个匿名函数中,您指定init = ...而不用var声明它,这意味着init将是一个全局变量。因此,Pinterest部分中的代码将覆盖最初在init部分中创建的全局Twitter

鉴于全局变量本质上是window对象的属性,TwitterPinterest都分配给window,这意味着同时调用Twitter.init()和{ {1}}与调用Pinterest.init()相同。所以这就是为什么他们都做同样的事情。

不幸的是,您的代码太长,我无法提供工作版本,因此我建议您阅读部分或全部参考文献:

答案 1 :(得分:1)

您需要在var前添加init,否则您将其置于全局范围内。这意味着init将等于最后一次赋值,在本例中是Pinterest版本。