Javascript JS-停止对象链方法,无错误
我们有一些食物Javascript JS-停止对象链方法,无错误,javascript,oop,Javascript,Oop,我们有一些食物 var Foo = function() { this.bar = function(bazinga) { if (bazinga) {return this;} else {return false;} } this.show = function() { alert('bar'); } }; 所以它允许我们做一些foo.bar().bar().bar().bar().bar()链 但是,如果
var Foo = function() {
this.bar = function(bazinga) {
if (bazinga) {return this;}
else {return false;}
}
this.show = function() {
alert('bar');
}
};
所以它允许我们做一些foo.bar().bar().bar().bar().bar()代码>链
但是,如果在链的中间,Bar()将返回false,则下一个Bar()尝试会导致错误:<代码>未定义没有方法BAL():/WordCH是OFC的事情。< /P>
那么,当它的任何“环”返回为false时,如何使所有链返回为false而不出错呢
您必须更改酒吧的退货类型。我建议为此创建一种null对象,并在链的末尾添加一个finalization方法,该方法为null对象返回false:
var Foo = function() {
var nullFoo = function() {
this.finalize = function() { return false; }
this.bar = function() { return this; }
}
this.finalize = function() { return this; }
this.bar = function(bazinga) {
if (bazinga) {return this;}
else {return new nullFoo();}
}
this.show = function() {
alert('bar');
}
};
foo.bar().bar().bar().bar().finalize();
对于您的fiddle示例,我没有使用finalize方法,而是为null对象提供了show方法。否则,最后仍然会出现false.show()
:
这就是您想要的:
JavaScript:
var Foo = function() {
var returnValue = true;
this.bar = function(bazinga) {
returnValue = returnValue && bazinga;
return this;
}
this.show = function() {
alert('bar');
return returnValue;
}
};
方法链可能有点危险。这一切都与依赖性有关
当使用方法链接时,最好注意链的每个部分返回的对象
如果它们不完全相同,例如它们不都是字符串,那么最好将链分解为单独的语句。或者将它们提取到一个单独的函数中
假设你有一些链子,比如
somearray.pop().getATagWrapper().getTag().setSrc("http://www.stackoverflow.com")
链的隐式依赖项是数组、Object1、标记包装器、标记、字符串
现在,您编写的函数现在与所有这些对象耦合,对这些对象的任何更改都有可能破坏您的代码
好像我们在看什么
someString.trim().substr(12).trim().concat("with awesome")
All只处理String对象
有关更多信息,请参见+1,它被称为空对象模式
——如何使用它的好例子!是的,我就是从那里得到这个词的。好的,我知道了。但我担心,如果类变大了,它不会变得棘手,我不是在寻找javascript或jQuery的方法,我已经有了。我正在寻找使用css动画或翻译的方法。