加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

javascript 中 call 的行使要领

发布时间:2018-09-01 13:36:27 所属栏目:创业 来源:站长网
导读:javaScript 中的 call() 是一个奇奥的要领,但也是一个让人疑惑的要领,先看一下官方的表明: call 要领 请参阅 应用于:Function 工具 要求 版本 5.5 挪用一个工具的一个要领,以另一个工具替代当前工具。 call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参
javaScript 中的 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的第二个参数必需是数组,也可所以arguments
尚有 callee,caller,这个和call的 用法就差异了。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读