Ext 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/hcmfys/archive/2009/11/09/1599057.html

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

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

相关文章

c/c++整理--c++面向对象(4)

一、对静态数据成员的正确描述 下列对静态数据成员的描述中,正确的是 A、静态数据成员可以在类体中进行初始化 B、静态数据成员不可以被类的对象调用 C、静态数据成员不能收private控制符的作用 D、静态数据成员可以直接用类名调用 解析: A错误。静态数据…

PHP 逆转字符串与逆转句子

1 <?php2 #颠倒字符串3 4 #将字符串从头和尾向中间遍历&#xff0c;交换位置5 function cstrrev(&$str, $begin, $len) {6 $i $begin;7 $j $begin $len - 1;8 while ($i < $j) {9 $temp $str[$i]; 10 …

sublime中编译的sass如何改变css输出风格?【这里有答案】

由于在网上找了一遍没找到如果在sublime中将sass编译的css转换成为自己喜欢的风格&#xff0c;所以换了一种思路搜索到了答案&#xff0c;这里我将讲述如果更改。 首先sass总共有四种编译风格 &#xff08;1&#xff09; nested&#xff08;嵌套缩进、默认风格&#xff09; #ma…

关于更改当前公司(一)--ChangeCompany

AX支持多公司帐套&#xff0c;如果一个集团公司有多个分公司&#xff0c;可以通过创建多个公司帐套的方式来实现&#xff0c;在写代码的时候会遇到需要切换公司的时候&#xff0c;AX2009提供了两种方式来实现多公司数据的查询&#xff0c;内置方法ChangeCompany和关键字CrossCo…

c/c++整理--c++面向对象(5)

构造函数的使用 以下代码中的输出语句为0吗&#xff1f;为什么&#xff1f;#include <iostream> using namespace std; struct CLS { int m_i; CLS(int i):m_i(i){ } CLS() { CLS(0); } }; int main() { CLS obj; cout<<obj.m_i<<endl; retur…

西电网络攻防大赛--渗透测试第二题

地址&#xff1a;http://test.xdsec.org/1/ 使用google浏览器打开 点击Resources 找到cookie 发现key 不过也是加密的 猜测是base64加密 so&#xff0c;百度一个解密网站 就直接百度应用了 结果&#xff1a;g0NexTdo0r

非多态的继承情况下,基类指针可以指向派生类对象么?

class Base { // 基类 public:Base(int aa88) : a(aa) {}void f() { // 非virtualcout<<"Base"<<endl;}int a; }; class Derived : public Base { // 派生类 public:Derived(int ba 77, int bb 66) : a(ba), b(bb) {}void f() { // 非多态cout<<…

软件架构阅读笔记(引)

引&#xff1a; 软件架构的目的是发现软件的问题是什么&#xff0c;怎么解决。这些软件遇到的问题往往来自实际项目中。然而作为一个学生的我很少有机会接触实际是项目&#xff0c;所以阅读也是学习的一种方式。从他人的做法中&#xff0c;也可以学习到知识。 各大互联网公司架…

嘗試著去做

昨晚跟叔叔深談許久&#xff0c;得知一熟人開一小型印刷廠&#xff0c;現在需要一套進銷存的管理軟件。對於我本身就從事于這樣的工作崗位&#xff0c;聽及情況后也能明白其中的一些需求。於是決定通過自己的學習來嘗試著去開發一下這樣的軟件&#xff0c;藉助于公司目前使用的…

母函数题目

hdu 1028 Ignatius and the Princess III 母函数模板题 http://acm.hdu.edu.cn/showproblem.php?pid1028 题意&#xff1a; 整数的拆分。 母函数学习http://www.wutianqi.com/?p596 View Code #include <iostream> #include <cstdio> #include <cstring> …

c/c++整理--析构函数

c中虚析构函数的作用是什么&#xff1f;析构函数是为了在对象不被使用后释放它的资源&#xff0c;虚函数是为了实现多态。那么&#xff0c;把析构函数声明为virtual有什么作用呢&#xff1f; 请看下面代码&#xff1a;<span style"font-size:18px;">#include &…

多态情况下,怎么用基类指针去访问基类的虚函数?

class Base { // 基类 public:virtual void f() {cout<<"Base"<<endl;} }; class Derived : public Base { // 派生类 public:virtual void f() { // 最好加上该virtual cout<<"Derived"<<endl;} };int main(){Base* p new De…

2018-11-01 专栏一岁了-我为什么投身于普及用中文编程

知乎专栏于2017年11月9日开通, 之前只想写些中规中矩的年度小结, 但感觉有些东西不吐不快, 权当人生阶段报告吧. 最早对编程的接触在初中, 同学帮他家里玻璃厂写了个优化切割率的程序, 我看了点源码. 高中时想自学C未果. 00年大学志愿选了听起来和计算机很接近的信息工程专业, …

VB-VB.NET中 从字符串“XX”到类型“Double”的转换无效

最近在做一个vb.net写的一个网站&#xff0c;有一次同学有个问题问我&#xff0c;说程序总是抛出“从字符串“aa”到类型“Double”的转换无效”的错误。我过去一 看是个操作数据库的函数&#xff0c;我一开始想到的就是给参数赋值赋错了&#xff0c;引发的数据库的错误。然后就…

c++整理--函数重载

一、为什么C语言不支持函数重载而c能支持 什么是函数重载&#xff1f;为什么C语言不支持函数重载&#xff0c;而c能支持函数重载&#xff1f; 解析&#xff1a;函数重载是用来描述同名函数具有相同或者相似的功能&#xff0c;但数据类型或者是参数不同的函数管理操作。在C语言里…

Linux 灾难恢复 Linux 系统启动故障修复

#http://hi.baidu.com/winshining/item/3d964328e252b6cfdcf69aaa #http://www.verydemo.com/demo_c281_i514.html 简介&#xff1a; Linux 发行版本众多&#xff0c;现如今也得到了越来越广泛的应用&#xff0c;同时也面临着系统出现故障的潜在风险&#xff0c;本文将详细介绍…

EPOLLOUT/EPOLLIN事件触发的条件

1、EPOLLOUT事件触发的条件&#xff1f; (1)、一次write操作&#xff0c;写满了发送缓冲区&#xff0c;返回错误码为EAGAIN(11)。 (2)、对端读取了一些数据&#xff0c;又重新可写了&#xff0c;此时会触发EPOLLOUT。 简单地说&#xff1a;内核缓冲区由不可写变为可写时会触发…

08.Numpy数组迭代

一般迭代 NumPy包包含一个迭代器对象numpy.nditer。 它是一个有效的多维迭代器对象&#xff0c;可以用于在数组上进行迭代。 数组的每个元素可使用 Python的标准Iterator接口来访问。 使用arange()函数创建一个 3X4 数组&#xff0c;并使用nditer对它进行迭代。 示例 1 >>…

专家答疑:在ERP系统中确保销售订单准确性

若销售订单有错&#xff0c;如订单数量或者订单价格有问题的话&#xff0c;则会造成一系列的连锁反应。计划模块、采购模块、生产模块、库存模块等等都会受到牵连。而且最要命的是&#xff0c;很哪进行调整。所以&#xff0c;在ERP系统使用过程中&#xff0c;应该千方百计保障销…

hdfs为什么要用block以及block大小的设置

1、在HDFS里面&#xff0c;文件存储为什么要以Block块的方式存储&#xff1f; 目的&#xff1a;减少磁盘寻道的时间。 (1)、不设置block&#xff1a;因为数据是分散的存放磁盘上的&#xff0c;读取数据时需要不停的进行磁盘寻道&#xff0c;开销比较大。 (2)、使用block: 一次…