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 相关文章推荐
js二级地域选择的实现方法
Jun 17 Javascript
jquery select多选框的左右移动 具体实现代码
Jul 03 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
Nov 08 Javascript
任意Json转成无序列表的方法示例
Dec 09 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
JavaScript实现全选取消效果
Dec 14 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 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
BBS(php & mysql)完整版(八)
2006/10/09 PHP
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
python定时器使用示例分享
2014/02/16 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
母亲节演讲稿范文
2014/01/02 职场文书
留学推荐信中文范文三篇
2014/01/25 职场文书
付款委托书范本
2014/04/04 职场文书
给老婆的保证书
2015/01/16 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
毕业设计工作总结
2015/08/14 职场文书
2016年社区文体活动总结
2016/04/06 职场文书