笔记——Function类型 及其 call、apply方法
每个函数都是Function类型的实例。函数有三种定义方式和两个内部属性arguments和this。
同时函数也是对象,也有属性和方法。本篇主要其call()和apply()方法
属性
- length 表示该函数希望接受的命名参数的个数
- prototype 保存引用类型的实例方法。这个大强大功能是实现继承。下篇文章会讲到。
方法
call() 和 apply()
这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。这便是它的强大的之处:扩充函数赖以运行的作用域。
window.color = 'red';
var obj = {color:'blue'};
function add(n1,n2){
console.log(this.color);
}
add(); //red, 这时的this是window
add.call(window); //red
add.call(obj); //blue, 此时this指向了obj
看明白了上面的例子,我们再来一个进阶的
function add(n1,n2){
debugger;
console.log(this.color);
alert( n1 + n2 );
}
add.color ='yellow';
function sub(n1,n2){
debugger;
console.log(this.color);
alert( n1 - n2 );
}
sub.color ='orange';
/*
在sub的作用域中调用add方法,实际上是改变了this的值。所以 add方法中的 console.log(this.color) 中的this是sub的作用域
*/
// 值为3, 是因为调用的是add的call属性.debugger会进add方法
add.call(sub,1,2); //3, orange;
add.apply(sub,[1,2]); //3, orange;
通过上面的例子,我们也可以看到call()与apply()方法的作用是相同,不同之处在于接收参数的方式不同。call()方法需要明确的传入每个参数,而apply()方法只需输入一个数组。
笔记——Function类型 及其 call、apply方法的更多相关文章
- 《JavaScript高级程序设计》读书笔记 ---Function 类型
说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ...
- Scala学习笔记(四):apply方法说明
当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖.请看下面一个简单的例子: class Foo(foo: String) {} object Foo { def app ...
- 我总结的call()与apply()方法的区别
[call()与apply()的区别]在ECMAScript中每一个函数都是function类型(是javascript的基本引用类型)的实例,具有一定的属性和方法.call()和apply()则是这 ...
- 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
$scope.$watch(watchFn , watchAction , deepWatch) 其中,watchFn是带有angular表达式或函数字符串: watchAction是一个函数或者表达 ...
- 【笔记】js Function类型 内部方法callee
运用function实现阶乘 以往的做法是如下的 function factorial(num){ if(num <= 1){ return 1; }else{ return num * fac ...
- JavaScript笔记——引用类型之Object类型和Function类型
<JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...
- Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...
- 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 ...
- 详细解析arry.map() ,function.apply() 方法
首先转载一篇博文:关于map 和callbackfn 的一些参数和返回值可以查看以下链接. http://www.cnblogs.com/xuan52rock/p/4460938.html array ...
随机推荐
- fedora 安装python mysql
如果你服务器环境允许yum,安装MySQL-python模块就很简单了. 如果直接安装不行,先 安装MySQL-devel后正常运行 yum install mysql-devel yum insta ...
- Asmack离线消息时间获取
DelayInformation info = (DelayInformation)message.getExtension("x","jabber:x:delay&qu ...
- homework08
1.局部变量生命周期 #include "iostream.h" ;} int main() { ; add1(n); cout << n << endl; ...
- HDU 5620 KK's Steel (斐波那契序列)
KK's Steel 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/J Description Our lovely KK ha ...
- Nginx反向代理 负载均衡 页面缓存 URL重写及读写分离
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- 转载yield关键字理解
实现IEnumerable接口及理解yield关键字 [摘要]本文介绍实现IEnumerable接口及理解yield关键字,并讨论IEnumerable接口如何使得foreach语句可以使用. 本 ...
- MSXML读取XML中文
// QueryNodes.cpp : Defines the entry point for the console application. // #include <stdio.h> ...
- 数据库防sql注入
- Long与long的比较
Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象是否是同一个对象如果比较两个Long对象值是否相等,则不可以使用双等号进行比较,可以采用如下方式:1. 使用 ...
- Android---App Widget(四)
接收App Widget广播的Intent对象 AppWidgetProvider只是一个便利的类,如果你想要直接接收App Widget广播,你可以实现自己的BroadcastReceiver类或重 ...