JavaScript中的函数调用模式
2016-11-09 21:00
176 查看
函数的四种调用模式
在JavaScript中的函数的调用模式常见的有四种:函数调用模式、方法调用模式、构造函数调用模式、上下文调用模式。函数调用模式
就是一个简单的函数调用,函数名前面没有任何的引导内容function test(){ } test();
在这种调用模式情况下,this在函数中表示全局对象,在浏览器中是window对象
方法调用模式
方法一定是依附于一个对象,将函数赋值给对象的一个属性,就是方法var obj = { sayHi:function(){ } } obj.sayHi();
在这种调用模式下,this指向调用该方法的对象
构造函数调用模式
构造函数只是给this添加成员,方法也可以完成这个操作,就this而言,构造函数与方法没有本质区别function Person(){ this.name = "zhangsan"; this.age = 20; this.sayHello = function(){ }; } var p = new Person();
在构造函数中的this和方法中的this一样,表示对象,但是构造函数中的对象是刚刚创建出来的对象。
上下文调用模式
上下文指的是函数执行的环境 就是this的指向在其他三种调用模式中的this的值是不可以进行手动设置的
上下文模式中改变this指向的两种方法
call
语法: 函数名.call(对象)这个方法的功能:
调用该函数
将函数内部的this指向第一个参数的对象
将除第一个参数外的其余参数当实参传递
function test(){ console.log(this.window); console.log(this); } test(); test.call({name:"zhangsan"});
apply
语法: 函数名.apply(对象)这个方法的功能:
调用该函数
将函数内部的this指向第一个参数里的对象
将第二个参数 也就是将数组中的每一个元素在函数调用的时候为改函数的每个形参赋值
第一个参数的使用规则
如果传入的是一个对象,那么就相当于设置该函数的this为参数如果不传入参数或者传入的是null、undefined等,那么就相当于this默认为window
如果传入的是基本类型,那么this就是基本类型对应的包装类型的引用
number->Number
boolean->Boolean
string->String
第二个参数的使用规则
在使用上下文调用的时候,原方法可能会带有参数,那么这个参数在上下文调用中使用第二个参数来表
上下文调用模式的应用
将伪数组转换成数组
var fakeArr = { 0:"a", 1:"b", 2:"c", length:3 } var arr = []; //这里主要利用的特性就是会将apply的第二个参数依次拆开 Array.prototype.push.apply(arr, fakeArr); //1.找到push方法 //2.改变push方法中的this指向为arr //3.把伪数组里面的元素拆开依次交给了push方法 //相当于直接使用arr.push("a","b","c") consloe.log(arr);
求数组的最大值
var arr = [1 ,2,3,3,4,4,34,3,43,43,43,4,34,3]; var max = Math.max.apply(null, arr); console.log(max); //1.先找到Math.max方法 //2.将this改为了window //3.把arr中的每一个元素,依次赋值给Math.max的参数 //就相当于Math.max(1,2,3,43,4,3,43,43,43)
相关文章推荐
- javascript语言精粹学习笔记之函数的四种this调用模式
- javascript的四种函数调用模式
- javascript 函数的4种调用模式
- JavaScript调用模式(this的取值)以及,call(),apply()函数浅析
- Javascript 函数的四种调用模式
- Javascript的四种(函数)调用模式
- javascript四种调用方式——方法调用模式、函数调用模式、构造器调用模式和Apply或Call调用模式
- javascript this 关键字以及四种函数调用模式
- JavaScript中函数的四种调用模式
- <javascript>this不同调用模式引起的问题,函数内部调用函数this无效
- 深入理解JavaScript系列(一): 函数的四种调用模式
- javascript的四种函数调用模式以及相应的this绑定
- Javascript 的函数调用模式,有意思的表现
- javascript 类中函数调用的that模式,避免this的丢失
- javascript中四种函数调用模式及对this的不同绑定
- JavaScript 函数四种调用模式
- 转:JavaScript 奇妙的函数调用
- .net中前台javascript与后台c#函数相互调用
- .net中前台javascript与后台c#函数相互调用问题
- net中前台javascript与后台c#函数相互调用问题