JavaScript中神奇的call()方法


Posted in Javascript onMarch 12, 2015

先看看关于call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,看了这样的解释,或许让你更摸不着头脑了。看例子:

var x = "我是全局变量";
//定义全局变量x

function a(){



 //定义函数类结构a


    this.x = "我是在函数类结构a中声明的哦";    

}

//定义普通函数,弹出当前指针所包含的变量x的值

function f(){       

    alert (this.x);

}

//返回值为“我是在函数类结构a中声明的哦”

f.call(new a());

我的理解是,f.call(new a())就是把函数(其实也是对象)f复制到被调用对象“new a()”下面去解析,事实上和下面这段代码的解析结果一样:
function a(){
this.x = "我是在函数类结构a中声明的哦";

alert(this.x);    

}

a();

只不过此时变量X的作用域不同而已,咿…看起来好像有点继承的味道哦,难道不是吗?在上例中,f完全被构造函数a的实力对象继承了,如果说这还不足以说明a.call(b)是一种继承模式,那么再看一个更具有继承味道的用法吧。
function f(){    

    this.a ="a";    

    this.b = function(){    

        alert("b");

    }

}

function e(){    

    f.call(this);     

}

var c = new e();

alert(c.a);  //弹出a

c.b();    //弹出b

在这个例子中,只要会使用浏览器的朋友,都能看得出来e完全继承了f的属性和方法,否则是无法解释的,因为在e中并没有定义属性a和b,那么按常理推断在e的实例对象c中,并不会出现这两个属性。
Javascript 相关文章推荐
Prototype使用指南之enumerable.js
Jan 10 Javascript
JavaScript 调试器简介
Feb 21 Javascript
javascript获取URL参数与参数值的示例代码
Dec 20 Javascript
js锁屏解屏通过对$.ajax进行封装实现
Jul 31 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 Javascript
小程序实现上下切换位置
Nov 16 Javascript
js数组的基本使用总结
Jan 18 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 #Javascript
JavaScript中定义函数的三种方法
Mar 12 #Javascript
javascript实时显示北京时间的方法
Mar 12 #Javascript
jquery实现焦点图片随机切换效果的方法
Mar 12 #Javascript
JavaScript数据结构与算法之栈详解
Mar 12 #Javascript
jQuery实现简单的日期输入格式化控件
Mar 12 #Javascript
Javascript数据结构与算法之列表详解
Mar 12 #Javascript
You might like
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
laravel学习教程之存取器
2016/07/30 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
2020/12/19 Vue.js
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python pandas修改列属性的方法详解
2018/06/09 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
用python解压分析jar包实例
2020/01/16 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
资源环境与城市管理专业推荐信
2013/11/30 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
典型事迹材料范文
2014/12/29 职场文书
详解Python牛顿插值法
2021/05/11 Python
React中的Context应用场景分析
2021/06/11 Javascript