博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 鸭子模型
阅读量:5220 次
发布时间:2019-06-14

本文共 859 字,大约阅读时间需要 2 分钟。

背景

学动态语言的都知道一句话:“如果它走起来像鸭子,而且叫起来像鸭子,那么它就是鸭子”,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);

备注

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

 原文:http://www.cnblogs.com/happyframework/p/3239790.html

转载于:https://www.cnblogs.com/guojian/p/4152725.html

你可能感兴趣的文章
[转载]树、森林和二叉树的转换
查看>>
WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
查看>>
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>
hdu - 1226 超级密码 (bfs)
查看>>
Sql常见面试题 受用了
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
中国剩余定理
查看>>
基础笔记一
查看>>
uva 10137 The trip
查看>>
Count Numbers
查看>>
编写高质量代码改善C#程序的157个建议——建议110:用类来代替enum
查看>>
网卡bond技术
查看>>