《JavaScript语言精粹》笔记--函数的调用
来源:互联网 发布:java泛型里的? 编辑:程序博客网 时间:2024/05/16 03:20
函数除了声明时定义的形式参数外,还接收两个附加的参数:this和arguments。
JavaScript中的this总是指向一个对象,而具体指向哪个对象取决于函数调用的模式,而非函数被声明时的环境。
在JavaScript中有四种调用模式:(1)方法调用模式(2)函数调用模式(3)构造器调用模式(4)apply调用模式。
(1)方法调用模式
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象(换句话说,this到对象的绑定发生在调用的时候)。
var obj = { value: 0, increment: function() { this.value+=1; }};obj.increment();
(2)函数调用模式
当一个函数并非一个对象的属性时,那么它被当作一个函数来调用。
例1:
var value;function increment(){ this.value++;}increment();
因为没有明确指定调用函数时的对象,因此increment函数中的this是指向了全局对象window。
例2:
同样,它里面的this指向的是全局对象window。var value = 500; var obj = { value: 0, increment: function() { this.value++; var innerFunction = function() { alert(this.value); //500 } innerFunction(); }}obj.increment();
若想要this指向obj对象,就定义一个变量that并给它赋值为this,那么内部函数就可以通过that变量访问到this。
例3:
(3)构造器调用模式var value = 500; var obj = { value: 0, increment: function() { var that = this; that.value++; var innerFunction = function() { alert(that.value); //1 } innerFunction(); }}obj.increment();
如果在一个函数前面加上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。
var Quo = function (string){ this.status = string;};Quo.prototype.get_status = function(){ return this.status;};var myQuo = new Quo ("confused");alert(myQuo.get_status());
(4)apply调用模式
var add = function(num1, num2) { return num1+num2;}array = [3,4];add.apply(null,array);
注意:apply第一个参数传递为null,并不是说将add函数的运行上下文环境设置为null,而是设置为全局对象window。
总结this指向:
1、作为普通函数调用(this指向全局对象window对象)
2、作为对象的方法调用(this指向该对象)
3、构造器调用(this指向用new返回的这个对象)
4、call、apply、bind的调用(this指向第一个参数对象)
阅读全文
1 0
- 《JavaScript语言精粹》笔记--函数的调用
- JavaScript 语言精粹的笔记
- javascript语言精粹笔记(三)函数
- 《JavaScript语言精粹》笔记(3)--函数
- 函数 -- Javascript语言精粹
- javascript语言精粹(函数)
- javascript语言精粹----笔记
- javascript语言精粹----笔记
- 《JavaScript语言精粹》笔记
- 《JavaScript语言精粹》笔记
- 《JavaScript语言精粹》笔记
- 《JavaScript语言精粹》笔记
- javascript语言精粹(函数2)
- 《JavaScript 语言精粹》 学习笔记 —— 第四章 函数
- JavaScript语言精粹学习笔记-函数(一)
- JavaScript语言精粹学习笔记-函数(二)
- 《JavaScript语言精粹》学习笔记——4.函数
- JavaScript语言精粹学习笔记
- 使用Qt+PySide将UI文件转化为py文件
- List 自定义排序
- java基础
- hdoj 1017-A Mathematical Curiosity
- 2017.06.08
- 《JavaScript语言精粹》笔记--函数的调用
- java语言基础-数组的静态初始化
- CheckStyle, 强制你遵循编码规范
- Zabbix监控:监控端口
- 整体二分入门——区间k小数查询
- JDBC简单入门
- python中的文件操作
- java环境变量配置的意义
- libvirt Java API用法连载之KVM/QEMU区别与libvirt简介(一)