Javascript:由 “鸭子类型” 得出来的推论

背景

学动态语言的都知道一句话:“如果它走起来像鸭子,而且叫起来像鸭子,那么它就是鸭子”,Javascript也支持鸭子类型,下文就说说鸭子类型在Javascript中的两个应用场景。

两个推论

  1. 凡是这样签名的方法:object.method(arg1, arg2, ...)的方法,都可以采用method.apply(object, [arg1, arg2, ...])进行调研。
  2. array的某些方法(不会修改array状态)可以使用arguments以Array.prototype.method.apply(arguments,[arg1, arg2, ...])的方式调用。
  1. 前者:把array当成arguments(鸭子)
  2. 后者:把argument当成array(鸭子)

一个小测试

Javascript中的惯用法

 1     console.log(Math.max.apply(Math, [3, 2, 1]));
2
3 var arr = [1, 2, 3]
4 Array.prototype.push.apply(arr, [4, 5, 6]);
5 console.log(arr);
6
7 (function () {
8 var arr = Array.prototype.slice.apply(arguments);
9 console.log(arr);
10 })(1, 2, 3);

我们自己来模仿鸭子

1     var arr = Array.prototype.slice.apply({ 0: 1, 1: 2, 2: 3, length: 3 });
2 console.log(arr);

备注

鸭子类型和隐式接口有那么一点点类似,它扩大多态的概念。

 

最新文章

  1. VS2013:Unit Test 单元测试入门
  2. js计算相隔天数日期
  3. js-form进行reset重置
  4. Vi文档
  5. js获取键盘按键响应事件(兼容各浏览器)
  6. 贪心(数据结构):COGS 468. [NOI2010]超级钢琴
  7. Android下 scrollview的滚动停止事件的监听方法
  8. Autofact 的使用
  9. 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。
  10. xend调用xenstore的出错揭秘
  11. 二维码开源库ZBar-MDK STM32F429移植
  12. java判断通常的逻辑
  13. 高性能JavaScript(1)
  14. poj-3080(kmp+暴力枚举)
  15. CloudSim源代码学习——云数据中心(Datacenter)
  16. git使用命令记录
  17. HDU Tody HDU2112
  18. hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)
  19. node.js fs,http
  20. jQuery ajax 302跨域

热门文章

  1. Linux经常使用命令(一) - ls
  2. 程序员面试必备经典CTCI,谷歌面试官经典作品!
  3. Oracle SQL in 超过1000 的解决方案
  4. Robotium源码分析之Instrumentation进阶-attach
  5. C语言与sqlserver数据库
  6. sudo找不到npm的解决办法及及使用cnpm加速[已解决]
  7. HDU 2079-课程时间(生成函数)
  8. MVC5系列——布局视图
  9. js关闭当前页面不弹出提示的方法
  10. 解决设置redmineblacklog的按钮无效问题