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 相关文章推荐
json简单介绍
Jun 10 Javascript
jquery插件制作简单示例说明
Feb 03 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
Jquery中$.post和$.ajax的用法小结
Apr 28 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
jquery 获取select数组与name数组长度的实现代码
Jun 20 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 Javascript
详解Vue.js v-for不支持IE9的解决方法
Dec 29 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
解析vue中的$mount
2017/12/21 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
Python中文竖排显示的方法
2015/07/28 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
用python写爬虫简单吗
2020/07/28 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
捐书仪式主持词
2015/07/04 职场文书
开网店计划分析
2019/07/30 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
Python实现单例模式的5种方法
2021/06/15 Python
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技