介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已。函数:如果一个函数与任何对象关系,就称该函数为函数。方法:如果一个函数作为一个对象属性存在,我们就称之为方法。接下来就可以开始今天的主体。

1、函数调用模式。

就是通过函数来调用,规范写法为:function fn(){} fn(); 函数中this的指向->window。案例如下:

    var age = 38;
var obj = {
age: 18,
getAge: function() { function foo() {
console.log(this.age); // 因为是函数调用模式,所以this指向window全局变量,所以输出为38
}
// 只看这个函数是怎么调用,不管函数是在哪声明的!
foo();
}
}; obj.getAge();

2、方法调用模式。

就是通过对象的属性来调用,规范写法为:

    var obj = {
say: function() {
console.log(this);
}
};
obj.say();

函数中this的指向->当前对象。案例如下:

  var age = 38;
var obj = {
age: 18,
getAge: function() {
console.log(this.age);// 18
}
}; obj.getAge();//因为是方法调用模式,this指向当前的对象obj。

3、构造函数模式

如果是作为构造函数来调用,那么this就是指向:new创建的新对象!规范写法为:

 function foo() {
this.name = "123";
}
var f0 = new foo(); 没有找到合适的案例,为大家见谅!!!

4、函数上下文(借用方法模式)。

上下文模式中this的指向和前三种模式不一样,它的this指向可以改变,而前三种模式是固定。函数上下文在我理解就是函数作用域。基本语法:apply和call 后面都是跟两个参数

apply和call第一个参数一样:表示使用那个对象来调用函数;apply第二个参数是:是一个数组或伪数组,数组的值做为函数的参数被传入;call第二个参数是:是基本数据类型(number string boolean);案例如下:

  //1:求一个数组中的最大值
方法一:常规写法
var arr = [9, 1, 4, 101, 7, 22, 8];
var maxNum = arr[0],
i = 1, len = arr.length; for(; i < len; i++) {
if(arr[i] > maxNum) {
maxNum = arr[i];
}
}
console.log(maxNum); 方法二:使用上下文调用模式(apply);
var arr = [9, 1, 4, 101, 7, 22, 8];
var maxNum=Math.max.apply(window,arr);//Math.max是window中的排序方法我们可以通过apply借用window中Math.max方法来对数组进行排序。
console.log(maxNum);

最新文章

  1. nginx反向代理docker registry报”blob upload unknown&quot;解决办法
  2. Anyconnect的VPN环境部署(1)-OpenConnect server(ocserv)服务安装
  3. 获取windows版本信息
  4. 字符编码的故事(ASCII,ANSI,Unicode,Utf-8区别)转载
  5. ASP.NET MVC 4 Ajax上传文件
  6. IOPS和Throughput
  7. 读取Excel数据绑定到Gridview进行显示
  8. 3、采用Gradle创Libgdx工程
  9. java编码问题
  10. typedef void far *LPVOID 的具体定义
  11. 生成简单的php验证码
  12. 记录一个古老的Sql分页过程
  13. java游戏开发杂谈 - 界面刷新、坐标系
  14. 爬虫——scrapy框架
  15. ruby新建web项目步骤,使用mysql数据库
  16. Newtonsoft.Json 的基本用法
  17. Jenkins Pipeline脚本
  18. Linux内核分析——ELF文件格式分析
  19. python之打印日志logging
  20. tensorRT使用python进行网络定义

热门文章

  1. [英语学习]王秒同学《21天TED英语精练团》
  2. Codefoces 791D. Bear and Tree Jumps 树形DP
  3. ios app抓包分析
  4. Being a Hero (hdu 3251 最小割 好题)
  5. ABAP 邮件
  6. YTU 1010: 目标柏林
  7. JavaScript 在浏览器环境中的模块管理
  8. cell.getCellType有几种
  9. python库学习笔记——BeautifulSoup处理子标签、后代标签、兄弟标签和父标签
  10. Spring 各种注解(@)的含义与认识