2013-12-11 43 views
0

我想訪問使用某些JSON響應的API。因此,我想配置一個'選項'對象,該對象存儲訪問api所需的所有數據(url,令牌,id等)。聲明JavaScript選項 - 對象的正確方法?

以下版本工作

var Options = function (token, id) { 
    this.token = token; 
    this.id = id; 
    this.host = 'http://super-cool-api.com/'; 
    this.path = 'api/fetch/id/'; 
    this.url = '' + this.host + this.path + this.id + '?token=' + this.token 
}; 
var options = new Options('abc', 3); 

// options.url = "http://super-cool-api.com/api/fetch/id/3?token=abc" 

基本上 'options.url' 是我想要的。但我試圖聲明一個更全面的形式爲「選擇」的對象,像這樣:

var options = { 
    token : 'abc', 
    id : 3, 
    host : 'http://super-cool-api.com/', 
    path : 'api/fetch/id/', 
    url : '' + this.host + this.path + this.id + '?token=' + this.token 
}; 

// options.url = "undefinedundefinedundefined?token=undefined" 

好吧,我明白,我必須訪問options.url不知何故其他的值。但是如何?這是常見的做法嗎?

我的第一個解決方案呢?建議這樣做嗎?

問候, 克里斯托夫

回答

2

不幸的是this在你的第二個示例指向包含代碼的對象,即不是options,這就是變量未定義的原因。第一種解決方案很好,因爲會是:

function makeOptions(token, id) { 
    var host = 'http://super-cool-api.com/', 
     path : 'api/fetch/id/'; 
    return { 
     token: token, 
     id: id, 
     host: host, 
     path: path, 
     url: '' + host + path + id + '?token=' + token 
    }; 
} 

選擇最適合您的是什麼。

1

告訴你這樣做的OK的方式,至於這樣做的最接受/標準的方式,我真的不知道這兩種方式。

下面是如何獲得第二個選項,你表現正常工作的例子:

設置的選項url來是構建URL並返回的功能。

var options = { 
    token : 'abc', 
    id : 3, 
    host : 'http://super-cool-api.com/', 
    path : 'api/fetch/id/', 
    url : function() { 
     return '' + this.host + this.path + this.id + '?token=' + this.token; 
    } 
}; 

然後你就可以使用下面的檢索值:var testUrl = options.url();

這裏是您的兩個實例的實例JSFiddle,再加上我的例子(選項3)