对象属性的值连接起来会返回NaN(Javascript)

5

我有一个对象,它有多个属性,每个属性的值都是一个字符串。当我尝试将每个属性的值连接起来时,它返回NaN。

var urlProps = {
   searchTerm: "searchSTUFF",
   baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
   tailURL: "&rawcontinue=&callback=?",
   finalURL: this.baseURL + this.searchTerm + this.tailURL
}

console.log(urlProps.finalURL);
//NaN

我在这里做错了什么,或者有没有正确的做法?

4个回答

6

当你尝试连接值时,对象还没有被创建。
此外,在任何情况下都不会表示对象。您会在构造函数或对象方法中使用它。
要获得所需的结果,您需要这样做。

var urlProps = {
   searchTerm: "searchSTUFF",
   baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
   tailURL: "&rawcontinue=&callback=?",
   finalURL: this.baseURL + this.searchTerm + this.tailURL
}
urlProps.finalURL = urlProps.baseURL + urlProps.searchTerm + urlProps.tailURL;

啊,我不知道在对象字面量中无法引用先前的属性。 这真的很好知道。 谢谢! - Chirpizard

3

我建议使用函数

var urlProps = {
   searchTerm: "searchSTUFF",
   baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
   tailURL: "&rawcontinue=&callback=?",
   finalURL: function() { return this.baseURL + this.searchTerm + this.tailURL; }
}

console.log(urlProps.finalURL());
//https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&e…=&titles=%20&generator=search&gsrsearch=searchSTUFF&rawcontinue=&callback=?

1
JS引擎在构建finalUrl时无法找到this.baseUrlthis.searchTermthis.tailUrl,因为正在构建的对象在引用目的上直到引擎完成构建它(在}处)之前都不存在。
为了使其正常工作,您需要确保在尝试引用之前该对象已经被构建完成:
var urlProps = {
   searchTerm: "searchSTUFF",
   baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
   tailURL: "&rawcontinue=&callback=?"
}

// here it can find it...
urlProps.finalURL =  urlProps.baseURL + urlProps.searchTerm + urlProps.tailURL;

1

this.baseURLthis.searchTermthis.tailURL 在对象字面量中的那一点都是 undefined。你需要在另一个语句中生成最终的 URL:

var urlProps = {
   searchTerm: "searchSTUFF",
   baseURL: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exsentences=1&exlimit=10&exintro=&explaintext=&titles=%20&generator=search&gsrsearch=",
   tailURL: "&rawcontinue=&callback=?"
};
urlProps.finalURL = urlProps.baseURL + urlProps.searchTerm + urlProps.tailURL;

对象仅在带有对象字面量的语句之后存在,并且在对象字面量内,this指向window对象(或上下文对象),而不是要创建的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接