2015-11-01 108 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()

相关问题