博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js call() apply()
阅读量:6614 次
发布时间:2019-06-24

本文共 1036 字,大约阅读时间需要 3 分钟。

ECMAScript规范给所有函数都定义了Call()与apply()两个方法,call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的,而apply传的剩余值必须为数组。

例如:

function add(a, b) { return a + b; }function sub(a, b) { return a - b; }/*apply用法* var a1 = sub.apply(add, [4, 2]);*var a2= add.apply(sub, [4, 2]);  */var a1 = sub.call(add, 4, 2);var a2= add.call(sub, 4, 2);输出:a1=2  a2=6

感觉还是有意未尽,更有意思的还在下面

js总是认为他是万能的,既然高级语言会继承,我js也不能示弱:JS模仿继承

function fun1() {    this.a = 123;    this.add = function () { return  this.a }}function fun2() {    this.a = 456;}var f1=new fun1()var f2=new fun2()var a = f1.add.call(f2);  // a输出的是456

这里就是把啊f1的方法拿给f2来使用,f2便可以使用f1中所有的方法,这不正是高级语言中继承的概念喽。当然根据综上可扩展出多继承,使用多个call便可以实现多继承

function fun1() {    this.add = function () { return this.a + this.b }}function fun2() {    this.sub = function () { return this.a - this.b }}function fun3() {    this.a = 10;    this.b = 2;        fun1.call(this);    fun2.call(this);}var f3 = new fun3()alert(f3.add());alert(f3.sub());

 

转载于:https://www.cnblogs.com/mrxia/p/4191084.html

你可能感兴趣的文章
基于vCenter/ESXi平台CentOS 6.8系统虚拟机Oracle 12c RAC双节点数据库集群搭建
查看>>
CentOS 7输入startx无法启动图形化界面
查看>>
#51CTO学院四周年# 终于在这里遇到你
查看>>
百度首次公布云业务收入,同比增长超100%,跻身国内第三
查看>>
Java学习笔记 1—命名规则、数据类型、运算符
查看>>
FusionCharts入门教程,使用指南
查看>>
我的友情链接
查看>>
数组的一些方法
查看>>
关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
查看>>
我的友情链接
查看>>
linux下查看nginx,apache,mysql,php的编译参数[转]
查看>>
Android掌中游斗地主游戏源码完整版
查看>>
LeetCode - 26. 删除排序数组中的重复项
查看>>
Linux LVM逻辑卷配置过程详解
查看>>
关于IT服务管理的服务台
查看>>
rundeck 修改密码 添加节点
查看>>
IT讲师韩顺平:创业不易,尚硅谷延续教育初心
查看>>
IntelliJ IDEA 插件 阿里巴巴Java开发手册
查看>>
利用nmap对Mongodb Redis未授权访问测试
查看>>
CakePHP
查看>>