DaJ*_*aJF 8 javascript chaining
找了好久,还是没有找到我想要的。
有相当多的示例要么需要创建一个新实例,要么只有不返回任何内容的函数(这意味着可以通过返回来解决问题this)。
我希望下面的例子很好地说明了我的观点:
// Say I have these functions
function aNumber(){
var max = 100, min = 0;
return (Math.floor(Math.random() * (max - min + 1)) + min);
}
function divideBy(_number, _divider){
return (_number / _divider);
}
function multiplyBy(_number, _multi){
return (_number * _multi);
}
function add(_number, _add){
return (_number + _add);
}
function subtract(_number, _sub){
return (_number - _sub);
}
// #########################################################
// I can do this with them
var test = aNumber();
test = divideBy(aNumber, 2);
test = add(aNumber, 5);
test = multiplyBy(aNumber, 3);
test = subtract(aNumber, 10);
// I would like to do this however:
var test = aNumber().divideBy(2).add(5).multiplyBy(3).subtract(10);
Run Code Online (Sandbox Code Playgroud)
使最后一行工作的最有效方法是什么?
我是否误以为这是可能的,而无需创建某个新实例?
是的,这需要改变Prototype的Object。对象是实例。所以你需要创建一个对象来做这种事情。
function MyNum(value) {
this._val = value; // Having _variable is for denoting it is a private variable.
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法初始化对象:
var myNum = new MyNum(5);
Run Code Online (Sandbox Code Playgroud)
现在使用这个,定义这些:
MyNum.prototype.divideBy = function () {}
MyNum.prototype.multiplyBy = function () {}
Run Code Online (Sandbox Code Playgroud)
不要忘记return this;在这些函数中使用。