2012-07-16 2 views
0

js 디자인 패턴에 익숙하지 않습니다. 그리고 지금 나는 문제가되었다. 너희들이 나를 도와 주길 바래. 고맙습니다.JavaScript 디자인 패턴, 함수를 덮어 씁니다.

코드는 여기에 있습니다 : http://jsfiddle.net/nNdna/ 라이브 페이지는 여기에 있습니다 : http://www.sumsy.com/demos/socialFeeds/

라이브 페이지로 이동하고 디버거 확인하시기 바랍니다. "pinterest init"이 로그에 표시되는지 확인해야합니다. 하지만 나는 "twitter init"이 메인 함수에서 Twitter.init를 호출했기 때문에 로그에 나타나기를 기대하고있었습니다.

MY 설치이었다 2 개 익명 자동 실행 기능

var Twitter = (function($, window){ ... init = function ... 
var Pinterest = (function($, window){ ... init = function ... 

후 내 주요 기능에서, I는 Twitter.init (user_twitter_options)라는 내부 모두 갖는 초기화 기능이있다;

하지만 Pinterest.init가 실제로 호출되는 것 같습니다. Pinterest.init가 Twitter.init 함수를 덮어 쓴 것처럼 보입니다.

아무도 나에게 무엇이 잘못 됐는지 말해 줄 수 있습니까? 2 개의 익명 자체 실행 기능이 없어야합니까?

고맙습니다.

+2

"코드"링크를 사용하면 빈 JSFiddle. – Domenic

+0

더 정확히 말하면 JSFiddle 홈페이지에 링크되어 있습니다. –

+0

죄송합니다. 내 잘못이야. 지금은 –

답변

3

바이올린의 코드에는 많은 문제가 있습니다.

모두 TwitterPinterest는 당신이 실제로 new 새로운 객체를 생성하거나 뭔가 this를 설정하는 작업을 수행하지 않는 때문에 thiswindow와 동일합니다 this을 반환 익명 함수를 호출 한 결과에 할당되고있다.

익명 함수 둘 다 내에서 으로 선언하지 않고 init = ...을 지정하면 init은 전역 변수가됩니다. 따라서 Pinterest 섹션의 코드는 원래 Twitter 섹션에서 생성 된 init 전역을 덮어 씁니다.

는 전역이 window 오브젝트의 특성은 본질적이고 TwitterPinterest 양쪽 모두 Twitter.init()Pinterest.init()를 호출하면 window.init() 전화와 같은 것을 의미 window 할당된다는 것을 감안할. 그래서 그들은 둘 다 똑같은 일을합니다.

불행하게도 코드는 너무 오래 내가 작업 버전을 제공하기 위해 통과하기위한 것입니다, 그래서 당신이 참조의 일부 또는 전부를 읽으십시오 :

+0

이 링크를 가져 주셔서 감사합니다. 이 페이지에서 모듈 내보내기 예제를 참조하여 문제를 해결했습니다. 감사! –

1

varinit 앞에 추가해야합니다. 그렇지 않으면 전역 범위에 넣고 있습니다. 즉, init은 마지막 할당과 같습니다.이 경우 Pinterest 버전입니다.

+0

으로 고정되었지만, init에 var를 추가하면. 내가 Twitter.init (user_twitter_options)를 호출 할 때 Twitter.init이 함수가 아닙니다. 주 함수 –

+0

에서 this.init = function() {....' –

+0

을 시도 했습니까? Twitter와 Pinterest 모두에게 this.init을 수행하면 동일한 문제가 발생합니다. pinterest 초기화가 호출됩니다. 나는 이것을 글로벌에 다시 추가한다고 생각하니? 어쩌면 내가 틀렸어 –

관련 문제