2

以前に使用したことのある他の人によって書かれたいくつかのスクリプトを分析することで、javascript を学んでいます (これには stackoverflow が不可欠です!)。このコードの一部 (コードを読みやすくするために途中から大幅にカットしました。すべてのコメントは私のものです) は、jquery プラグインであるfullCalendar.jsからのものです。

著者がここで何をしているのかわかりません:

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現在のオブジェクト内の "isFetchNeeded" という変数に関数 "bar" を代入していると思います (なぜこれを行うのかまだわかりません。速度は?)。

第二に、その線var foo=this.barは私を困惑させました。名前空間の魔法のようです。

最初の行について考えるのは正しいですか?そして、次の行は何をしていますか?

ありがとう

4

2 に答える 2

1

this.foo = barbarの値(それが何であれ)をという名前のオブジェクトのメンバーに割り当てますfoo。これは確かに他の多くのものと一緒に関数定義である可能性があります。

関数のスコープでvar trigger = t.trigger指定された変数を宣言します。より低いスコープで定義された他の関数、すなわちとがあります。これらはオブジェクトメンバーではないため、これらの関数内での使用は機能しません。宣言により、これらの関数でアクセスできるようになります。triggerEventManagerpushLoadingpopLoadingthis.triggervar trigger

私はこれまでで最高のJSプログラマーに近いとは言いません。そのため、彼のやっていることは意味があるかどうかEventManager.jsはわかりませんが、実際にどのように使用されているかはわかりますCalendar.js

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

彼は実際にはオブジェクトを作成しませんが、EventManagerオブジェクトを使用してそのコンストラクターを呼び出しCalendarます。 Calender trigger定義されているため、のvar trigger = t.trigger内部で機能しEventManagerます。同様に、行

var isFetchNeeded = t.isFetchNeeded;

Inは、メソッド「back out of」をCalendar.js取得し、スコープ内で呼び出すことができるようにします。isFetchNeededEventManagerCalendar

于 2013-02-26T23:40:39.100 に答える
0

変数thisは、関数が呼び出されたコンテキストを参照します。この場合 (コードが Web ブラウザーで実行されていると仮定) はwindowオブジェクトです。最初の行は、関数をオブジェクトisFetchNeededのメソッドに割り当てるだけです。this2 行目では、関数のローカル変数にthisのメンバー変数の値を代入します。triggerEventManager

于 2013-02-26T23:29:31.507 に答える