繁体   English   中英

一线式将原型方法转换为JavaScript中的函数

[英]One-liner to change a prototype method into a function in JavaScript

Javascript中的String对象具有一个称为toLowerCase的方法。 该方法的问题在于它要求您已经有一个String对象。

如果我想将该原型方法转换为可以在String上调用的函数,该怎么办?

我知道我可以这样做:

var f = function (str) { return str.toLowerCase(); }
f("HI") // = "hi"

我想避免使用function关键字。

我以为,因为我可以做到...

String.prototype.toLowerCase.call("HI") // = "hi"

...然后我可以这样做:

var f = String.prototype.toLowerCase.call
f("HI")

但这会导致错误:

Uncaught TypeError: f is not a function

同样applyapplybind

我希望使用f("HI")可以调用结果函数,因此不允许使用callapply

有没有办法不使用function来完成此操作?

对于那些不可避免地想知道为什么我不使用function关键字的人,只是出于好奇,可以帮助我更好地理解JavaScript。 我并不是想变得花哨,效率高或其他任何东西。 我不是在尝试过早优化,等等,因此请不要使用Knuth引号。

得到它了。 您拼凑了一个很困惑的难题,但我不确定是否有任何方法可以让我们接受第一个论点。

var pointlessFunctionBindingForJavascriptHackers =
   Function.prototype.call.bind(String.prototype.toLowerCase)

demethodize功能是否作弊?

function demethodize(meth) {
    return function () {
        return Function.prototype.call.apply(meth, arguments);
    }
}

var f = demethodize(String.prototype.toLowerCase);

至少,我希望这可以满足您的“帮助我更好地理解JavaScript”要求。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM