2016-09-07 65 views
0

我正在創建一個「車庫銷售 - isque」頁面,目前正在學習車把。我可以從一個js對象中調用一個函數嗎?

我想從一個屬性的定義中調用一個函數,並將返回的值作爲屬性值。

的設置我有現在的問題是:

var lawnGarden = [{ 
    title: "Lawn Mower", 
    price: 75.00, 
    img: "./img/lawnMower.jpg", 
    desc: "Great mower, kept in great condition, runs smooth.", 
    link: genLink(this.title); 
}, { 
    title: "Hedge Clippers", 
    price: 25.00 
}, { 
    title: "Shovel", 
    price: 10.00 
}, { 
    title: "Post Hole Digger", 
    price: 20.00 
}] 

function genLink(title) { 
    var baseURL = "https://pensacola.craigslist.org/search/sss?sort=rel&query="; 
    return baseURL + title.replace(" ", "%20"); 
} 

反正對我來說,做到這一點?或者更好的方法?

我應該提到我在nodeJS工作。

+3

順便說一句'.replace(「」,「%20」)'是一個糟糕的URL編碼器。它只會替換一個空格,並且不會編碼其他字符。使用'encodeURIComponent'。 –

+0

你可以像這樣在一個JS對象中調用一個函數,但是在你的代碼中'this'不引用該對象,它指向該對象聲明的範圍的'this'。'this'只有任何在函數聲明中找到修改的含義。 – 4castle

回答

0

您可以爲每個條目類型創建一個類。

class LawnGardenEntry { 

    constructor(title, price, img, desc) { 
     this.title = title; 
     this.price = price; 
     this.img = img || "stockimg.png"; 
     this.desc = desc || "default description"; 
     this.link = this.genLink(title); 
    } 

    genLink(title) { 
     var baseURL = "https://pensacola.craigslist.org/search/sss?sort=rel&query="; 
     return baseURL + title.replace(" ", "%20"); 
    } 

} 

var lawnGarden = [ 
    new LawnGardenEntry(
      "Lawn Mower", 
      75.00, 
      "./img/lawnMower.jpg", 
      "Great mower, kept in great condition, runs smooth." 
      ), 
    new LawnGardenEntry("Hedge Clippers", 25.00), 
    new LawnGardenEntry("Shovel", 10.00), 
    new LawnGardenEntry("Post Hole Digger", 20.00) 
]; 

你甚至應該爲它製作一個工廠方法,而另一個類可以更好地保存條目。這也取決於這些如何產生。

還的,你需要一個更好的genlink功能

0

在從@Alexander奧馬拉的鏈接後的意見和他的評論下方,我已經先行一步並修改我的代碼:

var lawnGarden = [{ 
    title: "Lawn Mower", 
    price: 75.00, 
    img: "./img/lawnMower.jpg", 
    desc: "Great mower, kept in great condition, runs smooth.", 
}, { 
    title: "Hedge Clippers", 
    price: 25.00 
}, { 
    title: "Shovel", 
    price: 10.00 
}, { 
    title: "Post Hole Digger", 
    price: 20.00 
}] 

//Url Generation and Endcoding 
for (i = 0; i < lawnGarden.length; i++) { 
    lawnGarden[i].link = genLink(lawnGarden[i].title); 
} 

function genLink(query) { 
    var uri = "https://pensacola.craigslist.org/search/sss?sort=rel&query=" + query; 
    return encodeURI(uri); 
} 

謝謝你提出的意見和答案,當我最初發表這篇文章時,我並不確定問題是什麼,當我通讀錯誤日誌時,並且因爲這對於我的問題的最佳表達方式有點無知。

這似乎是現在解決問題的最好方法。

+1

很酷,但是'lawnGarden.forEach(item => item.link = genLink(item.title))'會比* for *循環更加整潔。 ;-) – RobG

相關問題