簡體   English   中英

結合使用Google Drive API和Javascript原型

[英]Using Google Drive API with Javascript prototypes

因此,我不想使用Google的Javascript文檔中的示例使用全局變量進行標准的復制和粘貼,而是希望使用原型封裝所有內容。

我的功能從此開始:

define(function (require){
    'use strict';
    ...

但是我現在被阻止的有趣的一點是:

GoogleDrive.prototype.loadAPI = function() {
    window.gapi.load('picker', {'callback': this.onPickerApiLoad});
};

GoogleDrive.prototype.onPickerApiLoad = function() {
    this.pickerApiLoaded = true;
    this.createPicker();
};

那是行不通的,因為回調函數中的this不再是我的GoogleDrive函數,所以我得到:

Uncaught TypeError: Cannot set property 'pickerApiLoaded' of undefined

我該如何將.onPickerApiLoad連接到正確的作用域?

更新:

在@Jon的回答提示下,我研究了Underscore的bind方法源代碼,並使用了call ,所以我嘗試執行相同的操作,並使用一個函數返回綁定到所需上下文的原型函數的版本:

GoogleDrive.prototype.loadAPI = function() {
        var that = this;
        googleAPI.load('picker', {'callback': function() { return that.onPickerApiLoad.call(that) }});
    };

這似乎可行(必須確認),但並不那么優雅。

我敢打賭,您可以使用Underscore或Lo-Dash(替代Underscore的替代品)的綁定功能使它起作用:

GoogleDrive.prototype.loadAPI = function() {
    window.gapi.load('picker', {'callback': _.bind(this.onPickerApiLoad, this)});
};

我最終訴諸於call和一個匿名函數,通過它我可以傳遞自己的上下文:

var that = this;
googleAPI.load('picker', { 'callback': function() {
    return that.onPickerApiLoad.call(that)
} } );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM