一、简介

call()和apply()方法是所有函数体的固有属性,可以在指定作用域下调用函数。这里面有两层意思:1.可以在另外的作用域下调用函数;2.当函数体是是构造函数时,call()方法能达到类之间继承的效果。

二、call()

1.调用函数

下面举例说明:

var a = function (){
console.log('aaa')
} var b = function (){
a.call(this);
}
b(); //输出 aaa

a.call(this)等效于a(),即是在b函数的作用域下调用了a();这种用法意义不大,理解就行。

2.构造函数继承

call()方法主要在面向对象编程中使用,可在不同类(构造函数)中继承。

var A = function(){
this.a = function(){
console.log('aaa')
};
this.name = 'a';
console.log('this is a');
} var B = function (){
A.call(this);
this.num = '2';
} var boo = new B(); //this is a
boo.a(); //aaa
console.log(boo.name); //a
console.log(boo.num); //

A、B都是构造函数,A.call(this)即是在B作用域下调用A构造函数。因此,B继承了A的属性、方法,同时调用了A构造函数。B的实例将拥有A的所有特性。

下面我们再来看个例子:

var A = function(){
this.a = function(){
console.log('aaa')
};
this.name = 'a';
console.log('this is a');
} var B = function (){
A.call(this);
this.num = '2';
} var c = {}
B.call(c); //this is a
c.a(); //aaa
console.log(c.name); //a
console.log(c.num); //

定义对象c(非构造函数),再c的作用域下调用B构造函数,c对象也会继承B的所有属性、方法。这是一个对象实例和构造函数的区别。

最新文章

  1. Linux内核源代码获取教程
  2. hdu 1251:统计难题(字典树,经典题)
  3. 更改chrome底色为护目色
  4. smali语法中文版
  5. nyoj 284 坦克大战 (优先队列)
  6. Detect combined string
  7. [HDU 2049] 不容易系列之(4)——考新郎 (错排问题)
  8. CSS垂直水平居中
  9. The practice program of C on point
  10. Thrift框架简介
  11. python 提取pdf文字
  12. [SQL]LeetCode183. 从不订购的客户 | Customers Who Never Order
  13. JGUI源码:解决手机端点击出现半透明阴影(4)
  14. 新建DataTable
  15. mongoDB与mongoose
  16. 使用mybatis-spring-boot-starter如何打印sql语句
  17. SQL Server 创建索引(index)
  18. php企业建站源码
  19. (转)Maven学习-处理资源文件
  20. 通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点

热门文章

  1. Java MergeSort
  2. 奇妙的算法【11】LeetCode-专属算法面试题汇总
  3. js 中的 深拷贝与浅拷贝
  4. Vue绑定的table页面在Chrome浏览器左右抖动
  5. 【vue开发】vue插件的install方法
  6. harbor小结
  7. FreeRTOS列表和列表项
  8. vimrc config and NERDTree
  9. 详解es6中Proxy代理对象的作用
  10. asp.net core 读取appsettings.json配置项