我想访问一个用一些JSON响应的API。因此,我想配置一个'options'对象,它存储访问api所需的所有数据(url,tokens,id等)。
以下版本有效:
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'就是我想要的。但是我试图为'options'对象声明一个更全面的表单,如:
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中的值。但是怎么样?这甚至是常见做法吗?
我的第一个解决方案呢?建议这样做吗?
此致 克里斯托弗
答案 0 :(得分:2)
不幸的是,您的第二个示例中的this
指向包含代码的对象,即 NOT 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 :(得分:1)
你展示的两种方式都可以做到这一点,就像最常见/标准的做法一样,我真的不知道。
以下是如何使您展示的第二个选项正常工作的示例:
将选项的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)