最近研究OpenLayers源码时,发现其中使用了比较多的apply方法,对其也是很不明白。于是上网经过多方面了解以及自己细细体会后,终于算是基本明白是其干什么的了,这里分享下。
apply方法的造型是这样的,Function.apply(obj,args) 能接收两个参数:
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传递。
按网上大牛的解释是apply:劫持另外一个对象(a)的方法,继承a的属性.
为了进一步理解,我自己做了下小例子,如下:

(function () {
/*定义一个方法 rockMeber 有两个属性 name、location*/
var rockMeber = function (name, loction) {
this.name = name;
this.loction = loction;
}; /*再定义一个方法 rockTeam 会调用rockMeber*/
var rockTeam = function (name, loction, teamName) {
/*
*可以这么理解:this为当前的rockTeam,arguments为参数列表数组形式。
*执行apply方法时,rockMeber中的this就是rockTeam,
*所以rockTeam也会有name、location属性并进行赋值。
*同时会将this(rockTeam)返回。所以我们进行输出时,rockteam就会有相应的属性值。
*也可以这么理解为:rockMeber将属性创建到了rockTeam对象里面。
*/
rockMeber.apply(this, arguments); this.teamName = teamName;
}; $('#havetry').click(function () {
var rockteam = new rockTeam('石头', '吉他手', 'mayday');
$('#result').text('名字:' rockteam.name ' ' '职位:' rockteam.loction ' ' '乐队:' rockteam.teamName);
}); });

  代码中的注释写的也比较清楚,就不多说了,这就是我对apply的理解。

关于JS中apply方法的基本理解的更多相关文章

  1. 原生JS中apply()方法的一个值得注意的用法

    今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...

  2. js中apply方法的使用

    js中apply方法的使用   1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...

  3. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  4. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  5. angularJS中$apply()方法详解

    这篇文章主要介绍了angularJS中$apply()方法详解,需要的朋友可以参考下   对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的 ...

  6. 关于JS中的方法是否加括号的问题

    js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...

  7. js 中的方法注入(aop)

    js 中的方法注入 java中很多框架支持 apo 的注入, js中也可以类似的进行实现 主要是通过扩展js中方法的老祖 Function 对象来进行实现. Function.prototype.af ...

  8. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...

  9. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

随机推荐

  1. [IT新应用]如何用好搜索引擎学习英语

    用谷歌可以学习英语,用必应也可以的. 输入如下地址:global.bing.com,如果是中文界面,就单击顶部右侧“Switch to Bing in English”. 这个界面有很多英文原版的时事 ...

  2. php7安装及配置

    一.下载php-7.0.5http://cn2.php.net/distributions/php-7.0.5.tar.gz 二.解压安装:# tar zxvf php-7.0.5.tar.gz# c ...

  3. ArcGIS Server GP服务发布与测试(基础版)

    版本:ArcGIS Server 10.4    环境:win10 测试目标:创建一个GP服务,功能为根据要素属性信息(如FID)选择出输入内容的对应匹配要素. 注:这个测试非常基础,仅供新手发布GP ...

  4. Wordpress基础:文章和页面的区别

    页面: 页面是你可以单独建立一个固定页面,可以作为留言板,或者通知的单页面,发布之后是固定的网址. 页面并不能被分类.亦不能拥有标签,但是它们可以有层级关系.您可将页面附属在另一个页面之下. 对应模板 ...

  5. 《Linux内核设计与实现》CHAPTER5阅读梳理

    <Linux内核设计与实现>CHAPTER5阅读梳理 [学习时间:2.5hours] [学习内容:系统调用的概念.功能及实现:系统调用的创建和使用方法] CHAPTER5 系统调用 1.系 ...

  6. oracle:case when 语句的区间用法

    在练习case when 语句时,碰到一个例子,结果答案根本就不对,语法就通不过,开始想着是不是case 只能是一个固定的取值,毕竟例子内给的都是case是个固定的值,后来网上查了好久才发现还有区间的 ...

  7. Maven-007-Nexus 用户添加,用户角色分配,用户修改密码,管理员重置用户密码

    配置好 maven nexus 私服后,默认的用户可通过查看[Users]查看当前私服中所存在的用户,如下图所示:

  8. android如何获取到启动类的包和类路径

    ArrayList<String> list = new ArrayList<String>(); private List<ResolveInfo> mApps; ...

  9. C# gridControl 部分设置

    1.页数导航状态栏 2.列表行号栏 3.列标题显示隐藏 4.Button设置

  10. VirtualBox Win7 虚拟机 共享文件夹设置

    1.主机(Win10) 点击共享文件夹,例如D:\VMs\Sharefolder\,选择'属性->共享->共享',选择'Everyone',点击'添加',权限级别'读取/写入',然后一路点 ...