`
onlyor
  • 浏览: 377320 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js call 方法 (js方法继承)

js 
阅读更多
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的第二个参数必须是数组
分享到:
评论

相关推荐

    Javascript类的继承,使用this.callParent调用超类方法

    在本话题中,我们将深入探讨JavaScript中的类继承,并特别关注`this.callParent`这个方法,它是如何被用来调用超类方法的。 首先,让我们了解JavaScript中的构造函数。构造函数是一种特殊的函数,用于创建和初始化...

    JS:Call方法详解(js_的继承)

    ### JS:Call方法详解(js的继承) #### 一、Call 方法概述 在JavaScript中,`call`方法是一种非常强大的工具,它可以用来改变函数调用时的上下文环境。具体来说,`call`方法允许我们使用指定的对象作为函数内部的`...

    JsCall方法详解(js的继承).pdf

    JavaScript中的`call`方法是一种非常重要的函数调用方式,它允许我们改变函数调用时的上下文,即`this`的指向。`call`方法在处理对象间的交互、继承以及模拟类的行为时尤为关键。 首先,`call`方法的基本语法是`...

    js call方法详细介绍(js 的继承)

    JavaScript 中的 `call` 方法是实现继承和动态绑定的关键特性之一。它允许我们改变函数调用时的上下文,即 `this` 指向的对象。`call` 方法的使用方式如下: ```javascript function functionName(context, arg1, ...

    js代码-JavaScript call方法

    JavaScript中的`call`方法是Function对象的一个方法,它允许我们改变函数调用的上下文(即`this`的指向)并能直接调用其他对象的方法。`call`方法的使用非常广泛,尤其在继承和对象操作中扮演着重要角色。在深入理解...

    javascript 继承派生

    本资料集合关注的是JavaScript中的继承派生以及与之相关的`apply`和`call`方法。 **继承**是面向对象编程的关键概念,允许一个对象(子类)继承另一个对象(父类)的属性和方法。在JavaScript中,由于它没有内置的...

    js的继承方法小结(prototype、call、apply)(推荐).docx

    ### JavaScript 的继承方法小结(Prototype、Call、Apply) #### 一、JavaScript 原型继承 -- Prototype 在 JavaScript 中,“一切皆对象”。通过 `new` 关键字创建的对象是函数对象,而直接赋值的对象则是一般...

    js继承call()和apply()方法总结

    JavaScript 中的 `call()` 和 `apply()` 方法是两种非常重要的函数调用方式,它们在继承和对象间共享行为时发挥着关键作用。本文将详细解析这两种方法的定义、用途以及如何在实际场景中应用。 1. `call()` 方法 `...

    JavaScript继承

    除了传统的原型链继承,JavaScript还支持其他继承模式,如组合继承(组合使用构造函数和原型链)、寄生继承(通过创建父类副本改进继承)、原型式继承(使用`Object.create()`)、寄生组合式继承(被认为是最有效的...

    JS封装和继承-入门级

    JavaScript的继承机制使得一个对象能够从另一个对象那里获取属性和方法,从而实现代码的复用。主要有以下几种继承方式: 1. **原型链继承**:JavaScript的对象都有一个proto属性,指向创建它的函数的原型对象。通过...

    JS继承的实现方式

    ### JS继承的实现方式 JavaScript作为一种灵活且功能强大的编程语言,支持多种继承模式。下面将详细介绍几种常见的继承实现方式,并探讨它们的特点与应用场景。 #### 一、原型链继承 **核心思想**: 将父类的实例...

    js中继承的几种用法总结(apply,call,prototype)

    在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...

    JavaScript学习之三 — JavaScript实现继承的7种方式

    构造函数继承主要通过`call()`或`apply()`方法实现,将父类构造函数的上下文(`this`关键字)指向子类实例。这样,父类构造函数可以初始化子类实例的属性。然而,这种方式并不传递方法,只共享了实例属性,没有真正...

    利用javascript中的call实现继承

    总结来说,利用JavaScript中的`call`方法实现继承,主要是通过在子类构造函数内部调用父类构造函数,改变`this`的指向,从而将父类的属性和方法复制到子类实例上。这种方式灵活且易于理解,是JavaScript中实现继承的...

    JS中的call、apply、bind方法详解.pdf

    JS中的call、apply、bind方法详解 随着JavaScript的发展,函数调用对象的改变变得越来越重要。在JavaScript中,call、apply、bind三个方法都是函数对象的方法,它们的作用都是改变函数的调用对象。下面,我们将详细...

    javascript继承实例

    本篇文章将深入探讨JavaScript继承的实例,以及如何通过继承来提高代码的可维护性和效率。 首先,我们需要了解JavaScript中的原型(prototype)机制。每个JavaScript对象都有一个内部属性[[Prototype]],通常通过`_...

    JavaScript与安卓交互之JS调用安卓方法

    现在,你可以在JavaScript中通过`window.androidBridge.callAndroidMethod('message')`来调用Android的方法。注意,由于安全原因,Android 4.2及以上版本的WebView会限制JavaScript接口的调用,所以必须在主线程中...

    【JavaScript源代码】JavaScript继承的三种方法实例.docx

    ### JavaScript继承的三种方法实例详解 #### 一、概述 在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它通过构造函数和原型链等机制实现了类的功能,尤其是继承这一核心概念。继承是...

    JS继承.txtJS继承.txt

    JavaScript支持多种继承机制,包括原型链继承、构造函数继承、组合继承、寄生式继承以及寄生组合继承等。接下来,我们将详细探讨这些继承方式。 ### 1. 原型链继承 原型链继承是通过将一个对象设置为另一个对象的...

Global site tag (gtag.js) - Google Analytics