JavaScript中神奇的call()方法

作者:junjie 时间:2024-04-30 09:52:41 

先看看关于call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,看了这样的解释,或许让你更摸不着头脑了。看例子:


var x = "我是全局变量";//定义全局变量x
function a(){//定义函数类结构a
    this.x = "我是在函数类结构a中声明的哦";   
}
//定义普通函数,弹出当前指针所包含的变量x的值
function f(){      
    alert (this.x);
}
//返回值为“我是在函数类结构a中声明的哦”
f.call(new a());


我的理解是,f.call(new a())就是把函数(其实也是对象)f复制到被调用对象“new a()”下面去解析,事实上和下面这段代码的解析结果一样:


function a(){
this.x = "我是在函数类结构a中声明的哦";
alert(this.x);   
}
a();


只不过此时变量X的作用域不同而已,咿…看起来好像有点继承的味道哦,难道不是吗?在上例中,f完全被构造函数a的实力对象继承了,如果说这还不足以说明a.call(b)是一种继承模式,那么再看一个更具有继承味道的用法吧。


function f(){   
    this.a ="a";   
    this.b = function(){   
        alert("b");
    }
}
function e(){   
    f.call(this);    
}
var c = new e();
alert(c.a);  //弹出a
c.b();    //弹出b


在这个例子中,只要会使用浏览器的朋友,都能看得出来e完全继承了f的属性和方法,否则是无法解释的,因为在e中并没有定义属性a和b,那么按常理推断在e的实例对象c中,并不会出现这两个属性。

标签:JavaScript,call()
0
投稿

猜你喜欢

  • asp如何在网上查找链接?

    2010-06-22 21:10:00
  • perl实现检测服务器中的服务是否正常脚本分享

    2022-05-05 21:17:12
  • Python调用adb命令实现对多台设备同时进行reboot的方法

    2022-08-06 02:40:45
  • python Graham求凸包问题并画图操作

    2023-06-01 12:37:00
  • 快速掌握ASP连接11种数据库的常用语法

    2008-11-28 15:32:00
  • python 星号(*)的多种用途

    2021-08-13 06:16:27
  • Python读取Excel数据实现批量生成PPT

    2021-03-05 23:57:35
  • python频繁写入文件时提速的方法

    2023-11-11 01:48:40
  • ShardingSphere数据库读写分离算法及测试示例详解

    2024-01-19 06:21:09
  • C#将图片存放到SQL SERVER数据库中的方法

    2024-01-17 14:44:30
  • ASP中将Excel数据导入到Access

    2009-02-02 09:15:00
  • Python基于opencv实现的人脸识别(适合初学者)

    2021-10-13 19:39:29
  • Go每日一库之dateparse处理时间

    2024-04-26 17:25:55
  • javascript 得到变量类型的函数

    2024-04-30 08:53:34
  • 解决“引入同一个JS文件在非IE6中正常,但IE6报错”的问题

    2009-04-03 11:42:00
  • python使用yield压平嵌套字典的超简单方法

    2023-08-28 03:20:00
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结

    2012-08-21 10:22:21
  • 将keras的h5模型转换为tensorflow的pb模型操作

    2021-06-05 15:14:06
  • 基于JS实现经典的井字棋游戏

    2024-04-28 09:51:10
  • 对numpy中数组转置的求解以及向量内积计算方法

    2023-01-23 16:39:52
  • asp之家 网络编程 m.aspxhome.com