【发布时间】:2015-07-22 00:46:09
【问题描述】:
在下面的函数cat 中,您可以直接调用eat 和play 函数,而无需实例化新的cat 对象,这可以通过将函数cat.eat 中的值传入@987654328 来演示@函数获取状态。
var cat = function(obj){
// if (obj instanceof cat) return obj;
// if (!(this instanceof cat)) return new cat(obj);
// this.catwrapped = obj;
}
cat.eat = function(food){
if(food == "tuna") return 95
if(food == "milk") return 35
return 0
}
cat.play = function(energy){
if(energy < 50) return 0
return 100
}
var energy = cat.eat("tuna")
var status = cat.play(energy)
console.log(status) // 100
我正在尝试保留此功能并添加下划线样式链接。因此,您可以执行以下操作。这是如何实现的?
cat.day = function(obj){
var instance = cat(obj);
// instance._chain = true;
return instance;
}
var status = cat.day()
.eat("tuna")
.play()
.status()
console.log(status) // should log 100
我需要在cat 和cat.day 中拥有最少多少代码才能完成这项工作?
【问题讨论】:
-
哇,刚刚发现underscore loops over itself创建了所有
prototypes。 -
我想我错了,它只是将数组操作添加到下划线库中。
-
你的函数有在做什么吗?如果它们没有副作用,您可以完全省略对它们的调用。他们不应该至少改变 cat 实例吗?目前,您的函数只返回一些数字。下一个函数返回一个不同的数字,没有任何关联。链接在这里似乎毫无用处。
-
@Bergi 与它们相关的是它们被链接起来,就像下划线一样。前一个函数值通过管道传递到下一个函数。这就是 underscore 的作用,它产生的调用更加清晰,然后为每个函数返回值。 Here's a primer on underscore chaining.
-
不,这就是我要指出的:在您的示例函数中没有什么可以管道的。您的函数既不会返回可以调用哪些方法的猫,也不会返回可以作为参数传递给下一个函数的结果。
标签: javascript oop object chaining