0

我不熟悉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 ... 

然后从我的主要功能中,我调用了 Twitter.init(user_twitter_options);

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

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

先谢谢了。

4

2 回答 2

3

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

两者TwitterPinterest都被分配给调用匿名函数的结果,这些函数返回thiswherethis将等于,window因为您实际上并没有创建新对象new或以其他方式做任何事情来设置this某些东西。

在您分配的两个匿名函数中,init = ...没有声明它varinit全局变量。因此,该部分中的代码Pinterest将覆盖该部分中init最初创建的全局Twitter

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

不幸的是,您的代码太长,我无法提供工作版本,所以我建议您阅读部分或全部这些参考资料:

于 2012-07-16T02:21:12.717 回答
1

你需要var在前面添加init,否则你把它放在全局范围内。这意味着 init 将等于最后一个分配,在这种情况下是 Pinterest 版本。

于 2012-07-16T02:07:31.307 回答