2013-02-26 3 views
2

저는 전에 사용했던 다른 사람들이 작성한 스크립트를 해부하여 자바 스크립트를 배우고 있습니다 (stackoverflow는 이것에 필수적입니다!). 이 코드는 (코드를 읽기 쉽도록 중간에서 많이 잘라 냈고, 모든 주석은 내 것이 었습니다.) fullCalendar.js, jquery 플러그인에서 왔습니다.변수에 함수를 할당하고 자바 스크립트에서 함수 (?)에 변수를 할당합니다.

나는 저자가 여기서 무엇을하고 있는지 확실하지 않다 :

function EventManager(options, _sources) { //called using .call() 
    var t = this; 

    t.isFetchNeeded = isFetchNeeded; //?? assign the function "isFetchNeeded" to the variable (not the value returned by the function)?? 

    var trigger = t.trigger; //?? namespace?? 
} 

function View(element, calendar, viewName) { 
    var t = this; 

    function trigger(name, thisObj) { 
     return calendar.trigger.apply(
       calendar, 
       [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t]) 
     ); 
    } 
} 

첫째, 내 생각 엔이 this.foo=bar가 현재 Object (안 내 "isFetchNeeded"라는 변수에 함수 "바"할당된다는 점이다 그러나 왜 당신이 이것을 할 것인지, 속도?).

두 번째로, var foo=this.bar 줄에는 저를 괴롭 히고 있습니다. 네임 스페이스 마법처럼 보입니다.

첫 번째 줄에 대해 생각해보십시오. 그리고 다음 라인은 무엇입니까?

감사

+0

정직하게 말하자면, 좋은 자바 스크립트 입문서가 필요합니다. Spencer Tippings의 Javascript를 10 분 안에 권합니다. –

+0

자바 스크립트에는 "네임 스페이스"가 없으며 개체 속성 만 있습니다. 그리고 변수를 변수와 구별해야합니다. – Bergi

+0

@Bergi : 당신 말이 맞아요. 나는 "범위"를 생각하고 있었지만 "네임 스페이스"를 썼습니다. – amosglenn

답변

1

this.foo = barfoo이라는 개체 구성원에 bar (그 값은 무엇이든간에) 값을 할당합니다. 이것은 실제로 많은 다른 것들과 함께 함수 정의 일 수 있습니다.

무엇이 인지는 함수의 범위에 trigger이라는 변수가 선언됩니다. 낮은 범위에 정의 된 다른 함수, 즉 pushLoadingpopLoading이 있습니다. 이것들은 객체 멤버가 아니기 때문에, 그 함수 내에 this.trigger를 사용하면 (자) 동작하지 않습니다. var trigger 선언을 사용하면이 함수에서 액세스 할 수 있습니다.

내가 가장 잘하는 JS 프로그래머와 가까운 곳에 있다고 주장하지 않기 때문에 그가하고있는 일이 의미가 있는지 여부를 말할 수는 없지만 EventManager.js이 실제로 어떻게 사용되는지 볼 수 있습니다 (Calendar.js).) :

EventManager.call(t, options, eventSources); 
var isFetchNeeded = t.isFetchNeeded; 
var fetchEvents = t.fetchEvents; 

그는 실제로 EventManager 객체를 생성하지 않습니다, 그러나 그는 Calendar 물체를 사용하여 생성자를 호출합니다. Calendertrigger 인 것으로 정의되어 있습니다. 따라서 var trigger = t.triggerEventManager 내부에서 작동합니다. 마찬가지로 Calendar.js에서

var isFetchNeeded = t.isFetchNeeded; 

라인은 "위로 받음"EventManagerisFetchNeeded 방법을 취득하고이 Calendar 범위라고 할 수있다.

+0

좋은 설명입니다. 감사! 범위가 낮다고 생각하지 않았습니다. 그리고 저는 이제 저자가 첫 번째 유형을 "수출"이라고 부르고 두 번째 유형을 "수입"이라고 부른 것을 봅니다. – amosglenn

0

가변 this 참조 함수가 호출 된 상황. (이 경우에는 웹 브라우저에서 실행되는 코드를 가정)는 window 목적이다. 첫 번째 줄은 단순히 isFetchNeeded 함수를 this 개체의 메서드로 지정합니다. 두 번째 행은 this 값을 trigger 변수에 EventManager 로컬 변수에 할당합니다.

+1

'this'는 변수가 아니며 전역 객체를 참조 할 가능성도 없습니다. 이러한 함수는 생성자입니다. – Bergi

+0

'이 변수가이 함수가 호출 된 컨텍스트를 참조합니다. '라는 말이 올바르지 않습니다. 함수의'this' 매개 변수의 값은 (strict 모드에서) 어떤 값이나 그렇지 않으면 어떤 객체가 될 수 있습니다. 이것은 호출에 의해 전적으로 설정되며 호출이 수행 된 실행 컨텍스트와 완전히 독립적입니다. – RobG

관련 문제