2014年3月1日 星期六

call 方法使用在高階函示中

// 建立一個 Table 建構式, 可存放 key-value
function Table(name) {
    this.name = name;
    this.entries = [];
    this.addEntry = function (key, value) {
        this.entries.push({ key: key, value: value });
    };
    // f : 傳入一個方法當 callback, thisArg : 傳入一個物件當接收者
    this.forEach = function (f, thisArg) {
        var entries = this.entries; // 本身的值 (呼叫 forEach 的物件)
        for (var i = 0, n = entries.length; i < n; i++) {
            var entry = entries[i];
            f.call(thisArg, entry.key, entry.value, i);
        }
    };
}
// 實例一個 Table 然後加入一些資料
var tab1 = new Table('tab1');
tab1.addEntry(1, 'apple');
tab1.addEntry(2, 'ball');
tab1.addEntry(3, 'city');
// 再實例一個 Table
var tab2 = new Table('tab2');
// 將tab1的資料複製到tab2
tab1.forEach(tab2.addEntry, tab2);

沒有留言: