2015-12-14 3 views
5

У меня есть объект с несколькими свойствами, каждое свойство имеет значение, которое является строкой. Когда я пытаюсь конкатенировать значения каждого свойства, он возвращает NaN.Согласование значений свойств объекта возвращает NaN (Javascript)

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 

Что я здесь делаю неправильно или как правильно это сделать?

ответ

6

В точке, где вы пытаетесь конкатенации значения объект не имеет но был создан.
Также this не будет представлять объект в любом случае. Вы должны использовать это в конструкторе или объектном методе.
Чтобы получить результат, который вы хотите, вам нужно будет это сделать.

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; 
+0

Ahh, я понятия не имел, что вы не можете ссылаться на предыдущие свойства в объектных литералах. Это действительно здорово. Спасибо! – 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 не может найти this.baseUrl или this.searchTerm или this.tailUrl при попытке построить finalUrl, так как объект вы строите не «существует» для целей ведения, пока это двигатель завершает его строительство (на }).

Чтобы сделать эту работу, вам необходимо убедиться, что объект закончил строится, прежде чем пытаться обратиться к нему:

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.baseURL, this.searchTerm и this.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 объекта (или любой другой контекст), не к объекту, который будет создан.

Смежные вопросы