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 相关文章推荐
Track Image Loading效果代码分析
Aug 13 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
javascript框架设计读书笔记之种子模块
Dec 02 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 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
织梦模板标记简介
2007/03/11 PHP
php header示例代码(推荐)
2010/09/08 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php绘制圆形的方法
2015/01/24 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
Javascript模块化编程详解
2014/12/01 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Python制作简单的网页爬虫
2015/11/22 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
python实现学生信息管理系统源码
2021/02/22 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
英国假发网站:Hothair
2018/02/23 全球购物
工作自我评价分享
2013/12/01 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
护士辞职信怎么写
2015/02/27 职场文书
财务稽核岗位职责
2015/04/13 职场文书
具结保证书范本
2015/05/11 职场文书