js call

call 方法
请参阅
应用于:Function 对象
要求
版本 5.5
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

-------------------------------------------------------------------------------------------
乍一看,很容易把人看迷胡,先做一些简单的说明
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入.

举一个具体的例子
function add(a,b)
{
    alert(a+b);
}
function sub(a,b)
{
    alert(a-b);
}

add.call(sub,3,1);

这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。


看一个稍微复杂一点的例子

function Class1()
{
    this.name = "class1";

    this.showNam = function()
    {
        alert(this.name);
    }
}

function Class2()
{
    this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);

注意,call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2");

怎么样,觉得有意思了吧,可以让a对象来执行b对象的方法,这是java程序员所不敢想的。还有更有趣的,可以用 call 来实现继承

function Class1()
{
    this.showTxt = function(txt)
    {
        alert(txt);
    }
}

function Class2()
{
    Class1.call(this);
}

var c2 = new Class2();

c2.showTxt("cc");

这样 Class2 就继承Class1了,Class1.call(this) 的 意思就是使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”);

对的,就是这样,这就是 javaScript 如何来模拟面向对象中的继承的,还可以实现多重继承。

function Class10()
{
    this.showSub = function(a,b)
    {
        alert(a-b);
    }
}

function Class11()
{
    this.showAdd = function(a,b)
    {
        alert(a+b);
    }
}


function Class2()
{
    Class10.call(this);
    Class11.call(this);
}

很简单,使用两个 call 就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法
说了call ,当然还有 apply,这两个方法基本上是一个意思
区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组

转载于:https://www.cnblogs.com/mrray/archive/2012/07/04/2575858.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Fedora20】 samba配置

From: http://blog.163.com/shi_shun/blog/static/23707849201452641312640/ 1、安装前的准备 关闭防火墙 //不关的后果是windows看不到本机 systemctl stop firewalld //暂时关闭防火墙 systemctl disable firewalld //开机禁止启动 关闭selinux //不关…

64位ubuntu安装交叉编译器出现的问题。nuc972工程中的问题

现象 :arm-linux-gcc-v 出现no such file or dir. 解决办法:apt-get install lsb-core 现象:gcc: error while loading shared libraries: libstdc.so.6: cannot open shared object file: No such file or directory 解决办法:ap…

Linux PCI网卡驱动分析

http://www.uplinux.com/shizi/wenxian/4429.html Linux网卡驱动分析 学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那…

【操作系统】实验二 作业调度模拟程序

一、目的和要求 1. 实验目的 (1)加深对作业调度算法的理解; (2)进行程序设计的训练。 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序。 单道批处理系统的作业调度程序。作业一投入运行&#xff0…

Ubuntu 12.04 LTS安装VMware Tools:无法找到kernel header path的问题

From: http://www.cnblogs.com/lifegoesonitself/p/3357375.html Ubuntu 12.04 安装 VMware Tools,运行vmware-config-tools.pl 时,总是提示The path "" is not valid.What is the location of the directory of C header files that match y…

Nuc972使用NandFlash时,uboot所需要的改动

先贴错误现象。 做工程,我发现,就应该里面记录下来,哪怕再简单,一两个月后,果断忘,最不能相信自己的脑子。不好使~~~~

手把手教你用Python爬虫煎蛋妹纸海量图片

我们的目标是用爬虫来干一件略污事情 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛。而且现在网络上的妹子很黄很暴力,一下接受太多容易营养不量,但是本着有人身体就比较好的套路,特意分…

chrome浏览器的跨域设置,前端修改跨域问题

原文:https://www.cnblogs.com/laden666666/p/5544572.html 做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程。但是新版本…

Server 2012 Hyper-v新功能之二:自动化支持技术

Server 2012 Hyper-v新功能之一:客户端 Hyper-V Windows PowerShell 是在 Windows Server 中执行自动化任务的脚本解决方案,新的适用于 Windows PowerShell 的 Hyper-V cmdlet 为 IT 专业人员提供了一种简单的方法,能够在 Windows Server 201…

串口VMIN VTIME 详解

以前跟着做过VxWorks的开发&#xff0c;主要通信方式是串口&#xff0c;因为底层BSP包已经做好了&#xff0c;串口通信非常简单。后来接触Linux&#xff0c;在一块OK6410上跑Linux串口通信&#xff0c;才发现原来天真的以为甚是简单的串口变得如此的不简单。#include <termi…

cocos2dx 3.0 windows平台 中文乱码解决

From: http://www.cnblogs.com/yujiaao/p/3691938.html 因为linux下cocostudio wine安装不上 而且又要开发windows程序 果断舍弃了ubuntu而实用vs2013 去玩cocos2dx3.0 花了一天的时间才解决中文乱码 泪奔ing 分享记录下 下面是我尝试的的过程&#xff1a; 1相关设置 右键项…

liux 常用操作命令

tail -f /home/jyapp/apache-tomcat-7.0.59/logs/catalina.out //查看实施日志 //删除临时目录并且启动服务器 rm -rf /home/jyapp/apache-tomcat-7.0.59/work/* & rm -rf /home/jyapp/apache-tomcat-7.0.59/temp/* &/home/jyapp/apache-tomcat-7.0.59/bin/startup.sh…

SecureCRTSecureFX_HH_x64_7.0.0.326 crt部署项目到服务器

1.使用crt 2.输入服务器ip和账号 3.命令 cd 空格 /item/qd 回车进入到规定好的前端代码目录下 ls 查看目录下的文件 4.rm -rf 文件名称/或者目录名称&#xff08;空格删除多个、&#xff09; rm 空格 -rf 空格 *.zip 删除所有的zip rz 上传新的zip包 6。解压 unzip 空…

ant中的table和pagination表格分页结合使用 手写分页

表格部分 <a-table:row-selection"rowSelection" :columns"columns":data-source"data"class"components-table-demo-nested"change"onChangeTable":scroll"{ x:1600 ,y:500}":pagination"pagination&qu…

poj3692

最大独立集&#xff0c;把不认识的男女看成是有矛盾的&#xff0c;要选出一些互相没有矛盾的男女。 View Code #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std;#define maxn 205bool g[maxn][max…

NFS调试linux内核启动卡死在DHCP和RARP上

手头有两块板子。第一块有两个网卡phy&#xff0c;第二块一个网卡phy。为了驱动的统一使用&#xff0c;在内核中都配置如下 Device Drivers ---> [*] Network device support ---><*>Dummy net driver support <*> Nuvoton NUC970 Ethernet MAC 0 <*>…

在项目里交叉使用Swift和OC

From: http://blog.csdn.net/huangchentao/article/details/35278663 Swift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用SwiftOC的方式编写应用程序&#xff0c;称为混合匹配(mix and match)&#xff0c;用这种…

IE请求json数据时出现下载文件的现象。

当使用IE浏览器请求服务器时&#xff0c;会出现下载json文件的现象&#xff0c;就需要在spring-MVC.xml文件里配置&#xff1a; <bean class"org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" id"mappingJacksonHttpMessageCon…

Linux下查看TOMCAT控制台

Linux下查看TOMCAT控制台 $ ./catalina.sh run 就可以了。 debug模式&#xff1a; $ ./catalina.sh debug ...... help (查看帮助) exit&#xff08;退出、终止tomcat&#xff09; catalina.sh [para] para: debug start Catalina in a d…