2015-12-14 9 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

ああ、オブジェクトリテラルの以前のプロパティを参照できないということは考えていませんでした。これは本当に知って良いです。ありがとうございました! – Chirpizard

3

私はfinalUrlを構築しようとしたとき、あなたが構築しているオブジェクトは、まで参照の目的のために「が存在」しないため、JSエンジンはthis.baseUrlまたはthis.searchTermまたはthis.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=?", 
    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

を使用することをお勧めしエンジンが完成する(})。

、この作業を行うには、あなたは、オブジェクトが終了しているが、それを参照しようとする前に構築されていることを確認する必要があり:

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; 

オブジェクトは、オブジェクトリテラルを持つとwindowオブジェクトへのオブジェクトリテラルthisポイント(またはコンテキストが何であれ)、ない内に文の後に存在します作成するオブジェクトに追加します。

関連する問題