JavaScript 鸭子模型
Javascript:由 “鸭子类型” 得出来的推论
背景
学动态语言的都知道一句话:“如果它走起来像鸭子,而且叫起来像鸭子,那么它就是鸭子”,Javascript也支持鸭子类型,下文就说说鸭子类型在Javascript中的两个应用场景。
两个推论
- 凡是这样签名的方法:object.method(arg1, arg2, ...)的方法,都可以采用method.apply(object, [arg1, arg2, ...])进行调研。
- array的某些方法(不会修改array状态)可以使用arguments以Array.prototype.method.apply(arguments,[arg1, arg2, ...])的方式调用。
- 前者:把array当成arguments(鸭子)
- 后者:把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
JavaScript 鸭子模型的更多相关文章
- JavaScript闭包模型
JavaScript闭包模型 ----- [原创翻译]2016-09-01 09:32:22 < 一> 闭包并不神秘 本文利用JavaScript代码来阐述闭包,目的是为了使普通 ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- Javascript事件模型(一):DOM0事件和DOM2事件
javascript事件模型,本文主要有以下内容: DOM0事件模型 DOM2事件模型 一.DOM0事件模型 早期的事件模型称为DOM0级别. DOM0的事件具有极好的跨浏览器优势, 会以最快的速度 ...
- javascript 内存模型
我对于 JavaScript 的内存模型一直都比较困惑,很想了解在操作变量的时候,JS 是如何工作的.如果你和我有同样的困惑,希望这篇文章能给你一些启发. 译文,喜欢原文的可以直接拉到底部 当我们声明 ...
- JavaScript事件模型及事件代理
事件模型 JavaScript事件使得网页具备互动和交互性,我们应该对其深入了解以便开发工作,在各式各样的浏览器中,JavaScript事件模型主要分为3种:原始事件模型.DOM2事件模型.IE事件模 ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型
本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...
- python学习19类5之多态与鸭子模型
'''''''''一.多态1.Python中多态是指一类事物有多种形态.''' class Animal: def run(self): raise AttributeError('子类必须实现这个方 ...
- 【repost】JavaScript 事件模型 事件处理机制
什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...
随机推荐
- oracle 如何重置用户密码
- CSS display属性的值及作用
display 的属性值有:none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|tab ...
- Django Url编码问题
Django Url编码问题 最近在学习Django,写一个blog程序练练手手.对于一个才开始接触web开发的来说,难免会遇到一些问题. 有一个这样的模板: {%for k,v in cat ...
- opcache effect
with open opcache, the monitor cpu idle log , there are so much curl_exec and gzip in our php logic ...
- Android 数据库ORM框架GreenDao学习心得及使用总结<二>
转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...
- Xcode Coule not launch "aaa" press launch failed:timed out waiting for app launch
遇见这个问题 可能是 由于 runapp 的时候设置里面 设置为release了. 解决办法是:见图 build configuration 设置成 debug 状态就OK了. 要是上面的不行就试一下 ...
- 关于继承UITableViewController若干问题
// // MSHomeCommentTableViewController.m // xiaoqu-ios // // Created by Charlie on 15/7/1. // Copyri ...
- PHP学习之数据库操作
PHP数据库操作: 一.连接数据库 mysql_connect() 例:$link=mysql_connent("localhost","root"," ...
- 采购件不允许挂BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name BOM_BOMFDBOM 表单名 Form Name BOMFDBOM ...
- Android 检测SD卡应用
Android 检测SD卡应用 // Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 // ...