如何在JavaScript中创建可链函数
How to make chainable function in JavaScript?
让我们想象一下这样的函数:
function foo(x) {
x += '+';
return x;
}
用法如下:
var x, y;
x = 'Notepad';
y = foo(x);
console.log(y); // Prints 'Notepad+'.
我正在寻找一种方法来创建可与其他函数链接的函数。
想象用法:
var x, y;
x = 'Notepad';
y = x.foo().foo().toUpperCase(); // Prints 'NOTEPAD++'.
console.log(y);
我该怎么做呢?
当然,技巧是一旦修改完成就返回对象:
String.prototype.foo = function() {
return this + "+";
}
var str = "Notepad";
console.log(str.foo().foo().toUpperCase());
http://jsfiddle.net/Xeon06/vyFek/为了使该方法在String
上可用,我正在修改它的原型。注意不要在Object
上这样做,因为在枚举它们的属性时可能会导致问题。
如果我没记错的话,您可以使用"this"作为函数(它所属的对象)的上下文并返回它以使函数可链接。换句话说:
var obj =
{
f1: function() { ...do something...; return this;},
f2: function() { ...do something...; return this;}
}
,那么你可以像obj.f1().f2()
请记住,您将无法通过调用obj.f1(). touppercase()来实现您所期望的-它将执行f1(),返回"this"并尝试调用obj.toUpperCase()。
这里有一种不干扰String.prototype
的方法,通过返回一个类似于字符串的对象,并附带一个foo()
方法。然而,这种方法也有一些缺点,比如它没有返回一个实际的字符串。
// Returns an object similar to a string, with an additional method foo()
function foo(str) {
return Object.assign(`${str ?? this}+`, {
foo
});
}
var str = "Notepad";
console.log(
"EXAMPLE - foo(str).foo().toUpperCase():",
foo(str).foo().toUpperCase()
);
console.log("---");
console.log("Some issues with this solution:");
console.log("typeof foo(str):", typeof foo(str));
console.log("foo(str).foo():", foo(str).foo());
console.log(
"You may need to use toString() - foo(str).foo().toString():",
foo(str).foo().toString()
);
.as-console-wrapper { min-height: 100% }
相关文章:
- 如何在不使用 new 关键字的情况下从函数创建对象
- 如何使用特定的javascript函数创建一个url,以便在加载页面时运行
- geoTest函数-创建if/else语句
- D3数学函数创建
- Javascript:为函数创建回调
- 如何在追加函数创建后最小化单个框
- 对使用函数构造函数创建的函数的内部引用
- 获取使用函数构造函数创建的函数的名称
- 如何将函数绑定到使用链接函数创建 HTML 的角度指令
- 为什么可以't JavaScript构造函数创建字符串或数字
- 为什么用构造函数创建对象会执行对象's方法
- Jquery 函数创建一个异常的暂停
- JQuery.click,nor.on(“click”,..)与使用函数创建的ASP.NET和twitter boost
- 如何使用javascript函数创建可以调用javascript函数的聚合物元素
- 使用构造函数创建对象和返回对象有区别吗
- 通过父构造函数创建主干继承视图
- 使用构造函数创建的数字没有其值作为属性,请取消String与构造函数的链接
- 如何减少Crossfilter组函数创建的bucket数量
- 从两个单独的函数创建 JQuery 悬停
- 如何访问从函数创建和返回的对象的属性