2015-11-01 183 views
0

我正試圖用Javascript原型對象包裝頭部,並且可能由於我對傳統類的理解而遇到了塊。在原型構造函數中創建對象引用

我的代碼如下所示:

$(document).ready(function() { 
    var instance = new cards(); 
    $dom = instance.buildItem(5); 
} 
var cards = function() { 
    //constructor 
    this.chromaObj = chroma.scale(["lightblue", "navy"]).domain([2, 6]); 
} 
cards.prototype.buildItem = function (val) { 
    var scale = this.chromaObj; 
    var $item = $("<span>" + val + "</span>").addClass("label-default").addClass("label").css({ 
     "background-color": scale(val) 
    }); 
    return $item; 
} 

每次規模是所謂的buildItem功能,我在,這種規模是不是一個函數,但是如果我創建了規模實例的控制檯收到錯誤在buildItem函數內部,它按預期工作。

有人可以請指出我在正確的方向,爲什麼我無法在構造函數中定義時訪問函數引用?

+0

因爲比例不是函數。改變'this.chromaObj = chroma.scale([「lightblue」,「navy」])。domain([2,6]);'到'this.chromaObj = chroma.scale'這意味着你正在分配函數引用。 – vinayakj

+1

檢查'chroma.scale([「lightblue」,「navy」])。域([2,6])是否返回函數 –

+0

Chroma使用方法鏈模式,所以我調用的所有函數都應該返回一個新實例和對'this.chromaObj(val)'的調用應調用色度構造函數。我想將具體的scale([「lightblue」,「navy」])。domain([2,6])實例賦值給chromaObj。 – phosplait

回答

0

原始代碼確實可以正常工作。

我的問題原來是,我從其他方法(此處未顯示)使用通用cards.prototype.buildItem()調用buildItem,導致後續調用chromaObj未定義。

解決方法是將所有呼叫更改爲cards.prototype.buildItem()this.buildItem()

相關問題