我不熟悉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个匿名自执行函数吗?
先谢谢。
答案 0 :(得分:3)
小提琴中的代码存在很多问题。
Twitter
和Pinterest
都被分配给调用匿名函数的结果,这些函数返回this
this
将等于window
,因为你不是实际上是使用new
创建新对象,或以其他方式做任何事情来设置this
。
在两个匿名函数中,您指定init = ...
而不用var
声明它,这意味着init
将是一个全局变量。因此,Pinterest
部分中的代码将覆盖最初在init
部分中创建的全局Twitter
。
鉴于全局变量本质上是window
对象的属性,Twitter
和Pinterest
都分配给window
,这意味着同时调用Twitter.init()
和{ {1}}与调用Pinterest.init()
相同。所以这就是为什么他们都做同样的事情。
不幸的是,您的代码太长,我无法提供工作版本,因此我建议您阅读部分或全部参考文献:
答案 1 :(得分:1)
您需要在var
前添加init
,否则您将其置于全局范围内。这意味着init将等于最后一次赋值,在本例中是Pinterest版本。