Javascript中call的两种用法实例
用法一(常见用法):
表现形式为:一个对象.方法.call(另一个对象),意义是用另一个对象代替当前对象,执行当前对象的方法。先看示例:
functionClass1(){
this.name="class1";
this.showName=function(){
alert(this.name);
}
}
functionClass2(){
this.name="class2";
}
varc1=newClass1();
varc2=newClass2();
c1.showName.call(c2);
c2.showName(); //不能执行
我们先分别定义了两个function,分别是Class1和Class2,它们的主要区别是Class2比Class1多了一个showName()方法。接着定义了与Class1、Class2对应的对象c1和c2,这时候我们清醒的知道,c1有showName()方法而c2没有。但是奇迹出现了,当我们执行c1.shoName.call(c2)时,会弹出c2的name值,即"class2"。其实,我们执行的任然是c1的方法,只不过临时起意地把对象c2偷换成对象c1,执行完毕后,它们任然是定义时的样子,c2并没有因此多了些什么方法。为了检测c2有没有多了方法,示例加了行c2.showNmae();它是不能被执行的,浏览器会报出Object#<Class2>hasnomethod"showName"的错误。
为什么要这么做?前面说了,这是一种临时起意的使用方法,我们就是利用其高效的编程而已。但这并不是没有限制的,假设用c1和c2表示被替换的对象和替换对象,用fun1表示c1固有的方法。1、当fun1不需要参数,且不用到父函数中的任意局部变量时,其实c1.fun1.call(c2)和c1.fun1()没什么区别;2、当fun1不需要参数但是用到父函数中的变量,那么就要求生成c1和c2的function有相同名称的那些个被fun1使用的变量;3、当fun1需要参数时,形式要改写成c1.fun1.call(c2,参数1,参数2,...参数n),这个时候生成c1的function中的变量名就不必和生成c2的function的变量名同名了,只需对应即可。其实,我们在用到call的这种用法时,c2和c1往往在结构和功能上已经有很大的相似性了,所以上述三点很容易避免。
用法二:
在function的定义过程中使用,表现形式:另一个已存在函数.call(this),它可以将另一个已存在函数的变量、方法统统克隆到自己的函数中,实现一种类似于继承的功能。看个例子:
functionAnimal(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
};
varanimal=newAnimal("small_animal");
animal.showName(); //alert("small_animal")
functionCat(name){
Animal.call(this,name);
};
//varAnimal=null; //取消注释试一试
varcat=newCat("black_cat");
cat.showName(); //alert("black_cat")
相关文章
- 【说站】javascript原型链继承的使用
- javascript 数组求和_javascript数组的定义
- JavaScript弹幕实现详解编程语言
- Javascript中函数定义方法比较详解编程语言
- JavaScript中的Window.History返回对象的使用详解编程语言
- javascript 正则表达式详解编程语言
- html下利用javascript连数据库
- Javascript中的转义用法实例代码
- JavaScript中的this实例分析
- JavaScript获取/更改文本框的值的实例代码
- javascript禁用Tab键脚本实例
- javascript通用loading动画效果实例代码
- javascript获取网页标题代码实例
- 实例说明为什么不要行内使用javascript
- javascript常用的正则表达式实例
- Javascript实现简单二级下拉菜单实例
- .net与javascript脚本的交互方法总结
- javascript实现复制与粘贴操作实例
- JavaScript中的类数组对象介绍
- JavaScript中Cookie操作实例
- Javascript中innerHTML用法实例分析
- javascript面向对象之定义成员方法实例分析
- javascript正则表达式之search()用法实例
- javascript数组与php数组的地址传递及值传递用法实例
- Javascript闭包用法实例分析
- javascript中cookie对象用法实例分析
- javascript中键盘事件用法实例分析
- javascript中2个感叹号的用法实例详解