javascript 对象初探 (六)--- call()和apply()初探
在javascript中,每个函数都具有call()和apply()两个方法,您可以用她们来触发函数,并指定相关的调用参数。
此外,这两个方法还有另一个功能,就是她可以让一个对象去‘借用‘另一个对象的方法,并为己用。这也是一种简单的代码重用。
function her = {
name : 'Anna',
say:function(a){
return 'Hello'+a+'I am'+this.name+'!'
}
}
这样一来我们就能调用her对象的say方法。
her.say(Jon); // 'Hello Jon I am Anna!'
下面我们再创建一个对象,他只有一个name属性:
var his = {
name : 'Jock'
}
显然her的say()方法也同样适用his()方法。因此我们希望say()方法当做his对象自身的方法来调用,这是就用到了call()或apply()方法:
her.say.call(his,'Meng'); // 'Hello Meng I am Jock!'
成功了,但您明白为啥吗?因为这样一来say()中的this就被自动设置成了his的对象的引用,因而this.name为Jock而不是Anna了!!!
另外,如果我们没有将对象传递给call()或apply()的首参数,或传递的是null,她的调用对象将会默认为全局对象(即this指向window)。---实际上call()的第一个参数修改了对象this的指向。
apply()的原理其实和call()是相同的,只不过区别在于参数的传递形式,下面来对比一下:
her.say.call(his, a,b,c); her.say.apply(his, [a,b,c]);
javascript 对象初探 (六)--- call()和apply()初探的更多相关文章
- 第六章:Javascript对象
对象是javascript的基本数据类型.对象是一种复合值.它将很多值(原始值 或者其他对象)聚合在一起.可通过名字访问这些值.对象也可以看做是属性的无序集合,每个属性都有一个名/值.属性名是字符串, ...
- js 技巧 (六)JavaScript[对象.属性]集锦
JavaScript[对象.属性]集锦 SCRIPT 标记 用于包含javascript代码. 语法 属性 LANGUAGE 定义脚本语言 SRC 定义一个URL用以指定以.JS结尾的文件 windo ...
- web前端学习(二) javascript对象和原型继承
目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...
- 理解JavaScript中的arguments,callee,caller,apply
arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[n] 参数function :选项.当前正在执行的 Function 对象的名字. n : ...
- 博文推荐】Javascript中bind、call、apply函数用法
[博文推荐]Javascript中bind.call.apply函数用法 2015-03-02 09:22 菜鸟浮出水 51CTO博客 字号:T | T 最近一直在用 js 写游戏服务器,我也接触 j ...
- 深入学习JavaScript对象
JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢? 一.概述 对象是一种复合值,它将很多值(原始 ...
- JavaScript中bind、call、apply函数用法详解
在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务 ...
- 让操作javascript对象数组像.net lamda表达式一样
让操作javascript对象数组像.net lamda表达式一样 随着web应用程序的富客户端化.ajax的广泛使用及复杂的前端业务逻辑.对js对象数组.json数组的各种操作越来越多.越来越复杂. ...
- 面向面试编程——javascript对象的几种创建方式
javascript对象的几种创建方式 总共有以下几个模式: 1.工厂模式 2.构造函数模式 3.原型模式 4.混合构造函数和原型模式 5.动态原型模式 6.寄生构造函数模式 7.稳妥构造函数模式 1 ...
随机推荐
- LOJ 101 最大流(ISAP 模板)
开long long的最大流 #include<bits/stdc++.h> using namespace std; ;//点数的最大值 ;//边数的最大值 ; struct Edge ...
- 第十四届华中科技大学程序设计竞赛决赛同步赛 Beautiful Land
It’s universally acknowledged that there’re innumerable trees in the campus of HUST.Now HUST got a b ...
- Java策略模式(Strategy)
一.定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换.策略模式使这些算法在客户端调用它们的时候能够互不影响地变化.(Java的TreeSet集合中,构造方法可传入具体的比较器对象以实现 ...
- hdu 1011 Starship Troopers(树形背包)
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- loj2021 「HNOI2017」大佬
there #include <algorithm> #include <iostream> #include <cstring> #include <cst ...
- luogu3390 【模板】矩阵快速幂
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll k; c ...
- Notepad++ 使用正则表达式查找替换字符串
最近在改一些别人写的PHP代码,由于之前的代码可维护性比较差,因此工作量比较多,因此想找一些高效的方式改一些有规律的代码. 比如: 我想将一些类似$rowss[MaxGetCash_num], ...
- OA笔记
一:Asp.Net MVC请求处理原理(Asp.Net mvc 是怎样进入请求管道的.)请求-->IIS--->ISAPIRuntime-->HttpWorkRequest--> ...
- outline:0与outline:none区别
outline:0与outline:none的效果完全一样,用哪个都行,为了少写几个字,提倡用outline:0.具体区别如下: 出处: https://stackoverflow.com/quest ...
- [SCOI2016] 背单词 (Trie 树,贪心)
题目链接 大致题意 给你 \(n\) 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 \(n^2\). 2.如果一个字符串没有后缀,那么代价为 \(x\), ...