Js Call方法详解(js 的继承)
网络世界,大有可为
kings,提倡以用户为主的设计。
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的第二个参数必须是数组
原文网址: http://hi.baidu.com/kings_1981/blog/item/b220e43d08df74c09f3d6225.html
分享到:
相关推荐
### JS:Call方法详解(js的继承) #### 一、Call 方法概述 在JavaScript中,`call`方法是一种非常强大的工具,它可以用来改变函数调用时的上下文环境。具体来说,`call`方法允许我们使用指定的对象作为函数内部的`...
JavaScript中的`call`方法是一种非常重要的函数调用方式,它允许我们改变函数调用时的上下文,即`this`的指向。`call`方法在处理对象间的交互、继承以及模拟类的行为时尤为关键。 首先,`call`方法的基本语法是`...
call 方法的使用可以极大地提高 JavaScript 中面向对象编程的灵活性,它打破了传统继承的限制,使得开发者可以更自由地组织和复用代码。同时,了解 call 方法也有助于更好地理解 JavaScript 中的 this 指向问题,...
JS中的call、apply、bind方法详解 随着JavaScript的发展,函数调用对象的改变变得越来越重要。在JavaScript中,call、apply、bind三个方法都是函数对象的方法,它们的作用都是改变函数的调用对象。下面,我们将详细...
在JavaScript中,还有其他一些与继承相关的概念,如`call`和`apply`方法,它们可以改变函数调用时的上下文,从而实现方法的借用。`bind`方法则可以固定函数的`this`值,创建一个新的函数。 另外,`Object.create`...
5. **call、apply和bind方法** 这些方法可以显式地设置`this`的值。`call`和`apply`立即调用函数,而`bind`返回一个新函数,新函数的`this`被固定为传入的值。 ```javascript let obj1 = {name: 'John'}; let ...
在上面的例子中,`Person.prototype`被赋予了一个新的对象,这个对象有一个`getName`方法,当创建`zhang`这个`Person`实例时,它就继承了`getName`方法。 `constructor`属性是每个通过`new`关键字创建的对象都具有...
这是因为在JavaScript中,所有的函数都继承自Function原型,而Function原型上定义了call、apply和bind这三个方法。通过检测Function.prototype.hasOwnProperty('call')、Function.prototype.hasOwnProperty('apply')...
`apply`和`call`在某些场景下可以帮助我们解决因`this`指向不明确而引发的问题,比如在事件处理函数、对象方法、构造函数等场合。同时,它们也是实现函数柯里化(Currying)和模拟类继承等高级功能的基础。 安全...
在了解了上述继承方法后,值得注意的是,实现继承时的一些注意事项。例如,当改变一个对象的原型链之后,需要确保该对象的constructor属性仍然指向正确的构造函数。因为在JavaScript中,每个对象都会继承其构造函数...
JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...
### JavaScript继承的三种方法实例详解 #### 一、概述 在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它通过构造函数和原型链等机制实现了类的功能,尤其是继承这一核心概念。继承是...
JavaScript中的`call`和`apply`是两种非常重要的方法,它们都用于改变函数内部`this`的指向,并执行该函数。这两个方法都是Function对象的原型方法,因此所有的函数都具备`call`和`apply`。 1. `call`方法: - `...
例如,你可以创建一个基类`Animal`,然后通过`call`或`apply`在子类`Cat`中调用基类的构造函数,这样子类就继承了基类的属性和方法: ```javascript function Animal(name) { this.name = name; this.showName = ...
在JavaScript中,继承是通过不同的机制实现的,主要分为两大类:类式继承和原型式继承。...通过理解这些核心知识点,可以帮助开发者更好地掌握JavaScript继承机制,实现更为复杂和高效的应用程序设计。
在JavaScript中,有多种实现继承的方法,主要包括原型链继承、构造函数继承(通过`call`或`apply`)以及组合继承等。下面我们将详细探讨这些方法。 1. **原型链继承** 原型链继承是JavaScript中最常见的继承方式,...
call() 方法call() 方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身。例如: 代码如下:function sayHello(sPrefix,sSuffix) { alert(this.name + ”...
JavaScript Mixin 是一种实现多继承的技术,它允许一个对象(或类)继承多个其他对象(或类)的特性。在JavaScript这种仅支持单一原型链继承的语言中,通过Mixin可以模拟多继承的效果。以下是对JavaScript Mixin实现...
在继承场景下,通过`call`或`apply`,子类可以在构造函数中调用父类的构造函数,从而继承父类的属性和方法。例如,上面的`Animal`和`Cat`的例子就展示了如何通过`call`实现简单的继承。 至于多重继承,JavaScript中...
- 缺点:无法继承方法,因为拷贝的是值而非引用,当属性是复杂类型时,拷贝的是浅拷贝,而非深拷贝。同样不支持多继承。 - 推荐指数:★ 除此之外,JavaScript还提供了其他继承实现方式,如**组合继承**(结合了...