尝试创建仅在同一行内调用其他函数时才调用的函数调用。
var processTrack = new function() {
this.current = 1;
this.max = 5800;
this.min = 0;
this.done = function(started, processing, cur, len) {
cur = cur || 0;
len = len || 1;
var res = 0;
if (started && !processing)
res = ((this.current - 1 - this.min) / (this.max - this.min)).toFixed(2);
else if (!started && processing)
res = (this.done(true, false) + (this.step() * this.cur / this.len)).toFixed(2);
else if (!started && !processing)
res = ((++this.current - 1 - this.min) / (this.max - this.min)).toFixed(2);
this.percentage = function() {
return res * 100 + "%";
};
return res;
};
this.step = function() {
return 1 / (this.max - this.min);
};
}
我最理想的是致电processTrack.done(args).percentage()
以获取我从.done(args)
收到的数据中的百分比,但每当我尝试致电(例如)processTrack.done(true, false).percentage()
时,它都会给我一个错误话说:
TypeError: processTrack.done(...).percentage is not a function
我做错了什么?
答案 0 :(得分:2)
您需要在this
功能结束时返回res
而不是this.done
。通过返回this
,您将返回this.done
函数,该函数中包含percentage
函数。
以下代码运行时没有错误:
var processTrack = new function() {
this.current = 1;
this.max = 5800;
this.min = 0;
this.done = function(started, processing, cur, len) {
cur = cur || 0;
len = len || 1;
var res = 0;
if (started && !processing)
res = ((this.current - 1 - this.min) / (this.max - this.min)).toFixed(2);
else if (!started && processing)
res = (this.done(true, false) + (this.step() * this.cur / this.len)).toFixed(2);
else if (!started && !processing)
res = ((++this.current - 1 - this.min) / (this.max - this.min)).toFixed(2);
this.percentage = function() {
return res * 100 + "%";
};
return this;
};
this.step = function() {
return 1 / (this.max - this.min);
};
}
processTrack.done(true, false).percentage();
答案 1 :(得分:1)
以完成方法返回此内容。因为它返回的res不是一个对象