js函数的调用者和所有者

本文介绍了JavaScript中函数的调用者与所有者的概念,通过实例展示了如何使用Function对象的caller属性来引用调用函数,并解释了如何利用call和apply方法动态地改变函数的调用上下文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的调用者指的是函数被调用的域(可以理解函数本身),Function 对象的caller属性是对当前函数的函数的引用。如果该函数是从JavaScript程序的顶层调用的,caller的值为null。函数的所有者指的是调用这个函数的对象。
看例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
function dwn(s)
{
document.write(s+'<br/>');
}

//定义一个Point类型
function Point(x,y)
{
this.x = x ;
this.y = y ;
}

//定义一个Vector类型
function Vector(x,y)
{
this.x = x ;
this.y = y ;
}

function f()
{
dwn(this.constructor);
}

var p = new Point(1,3);
p.f=f;//把f()当做p的方法来用
p.f();//调用时,f中的this指向p,因此this.constructor得到p的构造函数Point

var v = new Vector(11,22);
v.f=f;//把f()当做v的方法来用
v.f();//调用时,f中的this指向v,因此this.constructor得到v的构造函数Vector
//-->
</SCRIPT>
</BODY>
</HTML>




下面说一下动态调用所有者
ECMAScript v3给function原型定义了两个方法:call和apply,使用这两个方法可以像调用其他对象方法一样调用函数。call()和apply()方法的第一个参数都是要调用函数的对象用call和apply调用函数是,函数内的this属性总是引用这个参数。call()的声誉参数是传递给要调用函数的值,数量可以是任意的.apply()只不过它只接受两个参数,第一个是调用对象,第二个参数是一个带下标的集合。
看例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
function dwn(s)
{
document.write(s+"<br/>");
}

//定义一个Point类型
function Point(x,y)
{
this.x = x ;
this.y = y ;
this.toString = function(){
return "("+[x,y]+")";
}
}

//定义一个Vector类型
function Vector(x,y)
{
this.x = x ;
this.y = y ;
this.toString = function(){
return "("+[x,y]+")";
}
}

//这个函数将传入的参数累加到独享的x,y属性上
function add(x,y)
{
return new this.constructor(this.x+x,this.y+y)
}

var p = new Point(1,2);
var v = new Vector(-1,2);
var p1 = add.call(p,3,4);//把add函数作为p的方法调用
var v1 =add.apply(v,[3,4]);//把add函数作为v的方法调用
dwn(p1);
dwn(v1);
//-->
</SCRIPT>
</BODY>
</HTML>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值