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 相关文章推荐
jQuery学习笔记之jQuery的事件
Dec 22 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
jQuery的内容过滤选择器学习教程
Apr 18 Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 Javascript
利用Decorator如何控制Koa路由详解
Jun 26 Javascript
JS中min函数实例讲解
Feb 18 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
Vue实现返回顶部按钮实例代码
Oct 21 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python语法分析之字符串格式化
2019/06/13 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
村委会贫困证明
2014/01/14 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
服务承诺口号
2014/05/22 职场文书
教师节倡议书
2014/08/30 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
党员个人年度总结
2015/02/14 职场文书
借款民事起诉状范文
2015/05/19 职场文书
爱国影片观后感
2015/06/18 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android