`
小巫婆
  • 浏览: 23160 次
文章分类
社区版块
存档分类
最新评论

JavaScript之call实例详解

 
阅读更多

原文链接:http://www.veryued.org/2011/09/javascript-call/

call()方法是做什么用的呢?与其看枯燥的文字解释,还不如看看他都可以用来做些什么来的实惠!
但是还要大概知道一下比较好
function.call(thisobj,args…)
call将指定函数function作为thisobj对象的方法来调用,将参数args传递给function,返回值为function的返回值。
thisobj是调用function的对象,在函数主体内thisobj是this的值,若thisobj为null,就使用全局对象

1、

?
function add(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
add.call(sub,3,1);

解释:add方法作为sub对象(javascript中函数即为对象)的方法调用,结果为4

2、

?
function Class1(){
this.name = "class1";
this.showName = function(){
alert(this.name);
}
}
function Class2(){
this.name = "class2";
}
var c1 = new Class1();
var c2 = new Class2();
c1.showName.call(c2);

解释:c1.showName方法作为c2对象的方法调用
Class2中并没有showName方法,使用call后,可以调用到c1中的showNam方法

3、

?
function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' + name + '" with a negative price');
return this;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
Food.prototype = new Product();
function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
Toy.prototype = new Product();
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

解释:这里的call用于连接另一个对象的constructor,有点像java中的super()。Food中的this指向Food的作用域,就相当于在Food作用域下调用Product函数.

4、

?
var animals = [
{species: 'Lion', name: 'King'},
{species: 'Whale', name: 'Fail'}
];
for (var i = 0; i < animals.length; i++) {
(function (i) {
this.print = function () {
console.log('#' + i + ' ' + this.species + ': ' + this.name);
}
}).call(animals[i], i);
}

解释:这里的call用于调用匿名函数,匿名函数作为数组中的对象的方法进行调用

5、

?
function Class1(){
this.showTxt = function(txt){
alert(txt);
}
}
function Class2(){
Class1.call(this);
}
var c2 = new Class2();
c2.showTxt("cc");

解释:这里利用call实现了继承

6、

?
function ClassA(){
this.showSub = function(a,b){
alert(a-b);
}
}
function ClassB(){
this.showAdd = function(a,b){
alert(a+b);
}
}
function ClassC(){
ClassA.call(this);
ClassB.call(this);
}

解释:这里使用call实现了多继承
更多的继承方法可以参考我的另一篇文章Javascript面向对象编程整理

分享到:
评论

相关推荐

    JavaScript继承与聚合实例详解

    本文实例讲述了JavaScript继承与聚合。分享给大家供大家参考,具体如下: 一、继承 第一种方式:类与被继承类直接耦合度高 1. 首先,准备一个可以被继承的类(父类),例如 //创建一个人员类 function Person(name)...

    javascript中this用法实例详解

    本文实例讲述了javascript中this用法。分享给大家供大家参考,具体如下: JavaScript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式。函数有以下几种调用方式:作为...

    JavaScript反射与依赖注入实例详解

    本文实例讲述了JavaScript反射与依赖注入。分享给大家供大家参考,具体如下: 对于javascript中的反射的理解,一直都是认为,利用数组对回调函数进行保存,之后在适当的时刻利用call或是apply 方法,对回调进行调用...

    JavaScript函数内部属性和函数方法实例详解

    函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind()、toString()、toLocaleString()、valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this。...

    js中apply与call简单用法详解

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是...

    ES6中javascript实现函数绑定及类的事件绑定功能详解

    本文实例讲述了ES6中javascript实现函数绑定及类的事件绑定功能的方法。分享给大家供大家参考,具体如下: 函数绑定 箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(call、apply、bind)。但是,箭头...

    精通JS脚本之ExtJS框架.part2.rar

     《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。  《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为...

    精通JS脚本之ExtJS框架.part1.rar

     《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。  《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 Form组件之详解字段 03 Form组件之常用标签示例 04 Form组件之动态绑定数据 第60章 Django序列化共6课 第61章 01 上节内容回顾 02 上传文件 03 制作上传按钮 04 Form组件上传文件 05 上传相关内容梳理 06 ...

    整理后java开发全套达内学习笔记(含练习)

    call n.v.调用; 呼叫; [kɒ:l] circumstance n.事件(环境,状况) ['sә:kәmstәns] crash n.崩溃,破碎 [kræʃ] cohesion 内聚,黏聚,结合 [kәu'hi:ʒәn] (a class is designed with a single, well-focoused ...

Global site tag (gtag.js) - Google Analytics