zoukankan      html  css  js  c++  java
  • Javascript:由 “鸭子类型” 得出来的推论

    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);

    备注

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

     
  • 相关阅读:
    戴尔英语09年互联网络投放策略规划书
    haproxy相关
    邮送广告
    python和rails交互应用
    ubuntu搭建邮件服务器
    waitr自动化测试
    ruby写爬虫
    free git svn repositories
    网站开发外包遇到的问题
    电影推荐
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3240104.html
Copyright © 2011-2022 走看看