call ( thisObj [, arg1 [, arg2 [,  [, argN] ] ] ])

call()方法:官方介绍是,调用一个对象的一个方法,以另一个对象替换当前对象。

     call()方法应用于Function对象,可以用来代替另一个对象调用一个方法,可将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象。如果没有提供thisObj参数,那么Global对象被用作thisObj.

  直接理解这几句话还是挺难理解的。先看一个例子:

function Class1(){
this.name = 'fine';
this.showName = function(){
console.log(this.name);
console.log(this);
};
console.log(this);
}
  //实例化构造函数
var class1 = new Class1();
class1.showName();

在Chrome浏览器中测试的结果是:

可以看到两个console.log(this)的值是一样的,均指向构造函数;

然后再把上面的例子修饰一下:

  function Class1(){
this.name = 'fine';
this.showName = function(){
console.log(this.name);
console.log(this);
};
console.log(this);
}
function Class2(){
this.name = 'ok';
}
//创建相应的实例
var class1 = new Class1();
var class2 = new Class2();
class1.showName.call(class2);//call方法必须应用于函数对象上

在浏览器中测试如下:

第一个Class1对象是位于Class1构造函数中showName方法之外的console.log(this),在使用call方法后,即

  class1.showName.call(class2);

这个位于showName方法之外的this仍然指向的是Class1.

接下来的 ok 和 Class2对象是位于showName方法内部的,this的指向已经改变,指向了Class2构造函数。可见,call方法改变了它所应用的函数中的this指针的指向。

暂时对call方法的理解就是这样了,以后有别的理解再补上,也可能有不对的地方欢迎补充~~

参考了Bparadise的博客文章:http://www.cnblogs.com/wuyuetian/p/4999723.html

 

最新文章

  1. 响应式web设计总结
  2. <%@ page contentType="text/html; charset=utf-8" language="java"%>每一个字符的含义
  3. Oracle空串与null的处理
  4. javascript闭包的一个例子
  5. Div 自适应屏幕大小
  6. 配置 RAILS FOR JRUBY1.7.4
  7. myeclipse如何修改Web项目名称
  8. __PUBLIC__模板文件路径配置
  9. js库开发
  10. 利用MARQUEE实现正在处理效果
  11. Visual Representation of SQL Joins
  12. git记录(给老婆找的地址)
  13. java多线程(3)---synchronized、Lock
  14. Oracle 导出用户下的所有索引创建语句
  15. java节假日api--关于节假日想到的
  16. 原生 ajax
  17. codefroces 450B矩阵快速幂
  18. shrink_to_fit
  19. 03.将MPP部署到开发板上
  20. 2_python之路之多级菜单

热门文章

  1. 使用mustache 做为docker容器运行动态配置工具
  2. 数组排序代码,冒泡排序&快速排序&选择排序
  3. 【题解】洛谷 P1449 后缀表达式
  4. Technocup 2020 Elimination Round 3题解
  5. dajngo控制台添加数据报错Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured.
  6. DDD 全称 “Domain-Driven Design”,领域驱动设计
  7. TypeError: BlobBuilder is not a constructor
  8. Appium-Python-Windows 环境搭建
  9. HustOJ二次开发之修改相关Logo
  10. SpringBoot整合MyBatis例子