javascript里apply都有哪些妙用的例子
ringa_lee
ringa_lee 2017-04-10 14:28:06
[JavaScript讨论组]

大家都说写代码要优雅简洁,一直对apply不太了解,搜了下,找到这个有用的,
http://www.cnblogs.com/xiaohongwu/archive/2011/06/15/2081237.html
初步了解了点,希望大家给点更高端的。
针对这个问题,我根据《JavaScript高级程序设计》里面的介绍,加上自己的一点点理解,小节了一篇:http://mengkang.net/234.html
如果有不对的地方还请斧正啊,哈哈。

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
PHP中文网

正好最近有用到一句话,我厚脸皮地称之为集原生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)

PHP中文网

你要用到一些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'
天蓬老师

在写 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');
ringa_lee

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号