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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
jQuery+easyui中的combobox实现下拉框特效
Feb 27 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
Mar 23 Javascript
JavaScript闭包的简单应用
Sep 01 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
Feb 09 Javascript
使用Vue动态生成form表单的实例代码
Apr 26 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 Javascript
vue打包时去掉所有的console.log
Apr 10 Vue.js
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发送邮件类代码附详细说明
2008/07/10 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php strftime函数的详细用法
2018/06/21 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript 数组运用实现代码
2010/04/13 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
用python发送微信消息
2020/12/21 Python
企业统计员岗位职责
2013/12/13 职场文书
事业单位请假制度
2014/01/13 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
全国道德模范事迹
2014/02/01 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
放飞理想主题班会
2015/08/14 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android