【发布时间】:2014-10-10 01:04:39
【问题描述】:
我想用三种略有不同的方式定义三个相同的对象。唯一的区别是我正在为每个对象访问源数据中的不同属性(通过括号表示法),如下所示
我使用的对象不是函数。例如 Object1 由
定义var Object1 = dc.lineChart("#chart-line-hitsperday");
var D = "Dimension1"
Object1
.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[D];}))
.group(SourceData.dimension(function (d) {return d[D];}).group().reduceSum(function (d) {return d.Amount;}))
var D = "Dimension2"
Object2
.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[D];}))
.group(SourceData.dimension(function (d) {return d[D];}).group().reduceSum(function (d) {return d.Amount;}))
var D = "Dimension3"
Object3
.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[D];}))
.group(SourceData.dimension(function (d) {return d[D];}).group().reduceSum(function (d) {return d.Amount;}))
有没有一种方法可以用 1 行代码来定义每个代码,而不是 3 行代码。换句话说,我想把上面的转换成下面的
Object1.definition("Dimension1")
Object2.definition("Dimension2")
Object3.definition("Dimension3")
通过将“定义”定义为:
definition(D) =
.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[D];}))
.group(SourceData.dimension(function (d) {return d[D];}).group().reduceSum(function (d) {return d.Amount;}))
这可能吗?
在此处查看 JSFiddle:http://jsfiddle.net/chrisguzman/juhaoem2/
我尝试了以下方法,但没有成功:
var definition = function(D){
this.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[D];}))
.group(SourceData.dimension(function (d) {return d[D];}).group().reduceSum(function (d) {return d.Amount;}))
}
Object1.definition("Dimension1")
第二次尝试
Object1.prototype.definition = function(dim){
this.width(200).height(200)
.dimension(SourceData.dimension(function (d) {return d[dim];}))
.group(SourceData.dimension(function (d) {return d[dim];}).group().reduceSum(function (d) {return d.Amount;}))
};
【问题讨论】:
-
由于您重复使用“D”的方式,您发布的代码无论如何都不会工作。
-
对,这就是重点。这是我希望可以工作但不起作用的代码。但是你明白我想要做什么吗?有没有办法重复使用 D 使其正常工作?
-
不,您的第二次尝试有一些错误,请查看我的更新答案
-
I've tried the following with no luck之后的代码如果您按以下方式调用它会起作用:Object1.definition.call(Object1,"Dimension1");如在 Vinz243 的回答中,我已经更新了它的使用方法。
标签: javascript function object definition