欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

问 javascript里apply都有哪些妙用的例子

大家都说写代码要优雅简洁,一直对apply不太了解,搜了下,找到这个有用的,

4个回答

2

正好最近有用到一句话,我厚脸皮地称之为集原生Function方法之大成。

背景是NodeJS中,接入某外部API的时候,有些参数是相对固定,应当在配置中的,例如IP地址,端口,secret等,另一些参数是运行时的,和用户有关或者不那么固定的,比如接口名字之类。就比如我们有ip, port, secret, action, user这样5个参数吧。 这时候我希望能在配置文件里配置好ip, port, secret,然后运行时再传action和user。行话叫currying

首先我们有这么个基础的API

function request(ip, port, secret, action, user) { }

有这样一些环境配置

env.config.server = [
    null,
    '1.2.3.4',//ip 
    9876, //port
    'secret'//secret
];

重点来了,我写了类似这样的代码

var requestServer = Function.prototype.bind.apply(request, env.config.server);

理解一下上面这句代码?想想requestServer怎么个用法?


PS 因为题主问的是apply,所以这个例子和实际情况稍有不同,实际情况是因为request也是我写的,所以它的签名是request(remote = {ip, port, secret}, action, user),然后那句话是Function.prototype.bind.call(request, config)

1

你要用到一些Array或者String上的方法可能会用到apply。

var o = {'0': 'a', '1':'b', '2':'c', length: 3};
var result = Array.prototype.reduce.apply(o, [function(a, b){
    return a+b;
}]);  //result = 'abc'
1

在写 userscript 时,我这样用 console.log

function log() {
    var message = Array.prototype.slice.call(arguments, 0);
    console.log.apply(console, ['[my-prefix]'].concat(message));
}
log('a', 'b', 'c');
0

一般不会用到, 但是如果做框架什么的, 中间处理 this 引用时候可能遇到了,
看一下 CoffeeScript 编译出来的代码, 没有 .apply 真不到他们还能怎么办...
http://coffee-script.org/

来自  https://segmentfault.com/q/1010000000534088
普通分类: