javascript - 从方法链的末尾获取不同的输出
问题描述
如果我有一个看起来像这样的方法链:
object.value.add(1).multiply(2);
对象是这样的:
var object = {
"value":1,
"add":function(x){
this.value = this.value + x;
return this;
},
"multiply":function(x){
this.value = this.value * x;
return this;
}
}
这将输出:
{
"value":4,
"add":function(x){
this.value = this.value + x;
return this;
},
"multiply":function(x){
this.value = this.value * x;
return this;
}
}
但我希望它输出:
4
这可能吗?而且我不想为输出创建另一种方法,如果它不是方法链中的最后一个,我希望“乘法”方法(和“加法”方法)将整个对象相乘(这样方法链是可能的),但是当它是最后一次时,我希望它输出“值”属性。
解决方案
没有有效的方法(甚至可能没有方法)让该方法知道它是否是链的最后一个成员。
为什么不是这个?
object.add(1).multiply(2).value
您也可以valueOf
在非常具体的场景中加以利用,但不能将其用作为此目的的通用策略。
var object = {
"value":1,
"add":function(x){
this.value = this.value + x;
return this;
},
"multiply":function(x){
this.value = this.value * x;
return this;
},
valueOf: function () { return this.value; }
};
console.log(object.add(4).multiply(2) / 2); //5
推荐阅读
- ruby-on-rails - redirect_to new_user_session_path 不显示 Flash 消息
- javascript - 离子验证突出显示不适用于离子选择
- android - 删除部分 ImageSpan 时删除整个 ImageSpan
- ssl - TLS 记录协议如何重组接收到的数据?
- r - 在 bookdown 的 pdf_book before_body 中运行 knitr 代码块
- java - Eclipse 光子丢失 java 文件
- javascript - 鼠标右键单击IE11崩溃
- mule-component - 无法使用参数错误 mule 4.0 调用函数“map”的任何重载
- laravel - 使用高级休息客户端发送带有其他帖子数据的文件?
- javascript - 如何根据日期禁用下拉选项