`
lee3836
  • 浏览: 68274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js函数的调用者和所有者

阅读更多
函数的调用者指的是函数被调用的域(可以理解函数本身),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>

分享到:
评论

相关推荐

    JavaScript函数调用堆栈loader

    总结起来,"JavaScript函数调用堆栈loader"是Webpack中的一个工具,它可以帮助开发者捕获并可视化JavaScript代码的执行路径,提供了一种有效的方式来调试和优化程序,尤其对于理解和解决运行时错误、性能瓶颈等问题...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    接下来,我们来看看实现动态函数调用的几种方式: 1. 使用eval()函数: eval()函数可以执行字符串中的JavaScript代码,如果我们知道要调用的函数名的字符串,可以将其与括号“()”组合起来形成代码字符串,并用eval...

    JavaScript实现显示函数调用堆栈的方法

    JavaScript函数调用堆栈是程序执行过程中一种重要的信息,它记录了函数调用的顺序和层次关系,有助于开发者理解程序执行流程,特别是在进行错误调试和性能分析时。在现代浏览器中,通常可以通过console对象的trace...

    JS中获取函数调用链所有参数的方法

    在JavaScript编程中,函数调用链指的是一个函数被另一个函数调用,而后者又可能被另外一个函数调用,形成的一系列函数调用的链条。在某些情况下,开发者可能需要获取这一调用链上所有函数的参数,这可能用于调试、...

    JS函数集合大全/JS函数

    根据给定的文件信息,以下是对“JS函数集合大全/JS函数...以上知识点覆盖了JavaScript语言的基本语法、DOM操作、字符串处理、数学运算、日期时间处理以及表单操作等方面,为初学者和进阶用户提供了一套全面的学习指南。

    多项式曲线拟合函数调用器

    函数调用器的设计允许用户根据需要调整多项式的阶数和拟合的参数。例如,用户可能想要比较不同阶数的多项式模型,以确定哪个模型能够提供最佳的拟合度和预测能力,同时避免过拟合。过拟合是指模型过于复杂,对训练...

    JavaScript直接调用函数与call调用的区别实例分析

    JavaScript中的函数调用可以使用多种形式,最基本和常见的就是直接调用函数,但在某些场景下,我们可能会使用到更为动态和灵活的调用方式,比如通过call和apply方法进行调用。这两种方式在功能上有相似之处,但具体...

    JavaScript函数的特性与应用实践深入详解

    首先,JavaScript函数是一种对象,这使得它们拥有对象的所有属性和方法。函数对象连接到Function.prototype,而这个对象本身又连接到Object.prototype。在创建函数时,JavaScript引擎会为每个函数添加两个隐藏属性:...

    javascript 所有函数 代码+目录

    这个压缩包文件“javascript 函数速查”提供了一个详尽的JavaScript函数手册,包含代码示例和目录结构,使得开发者能够快速查询和理解各种函数的用法。 目录通常按照函数类别或功能进行组织,可能包括数据类型操作...

    javascript函数

    每当函数被调用时,都会创建一个新的作用域链,这个链由当前函数的作用域、其调用者的作用域,直到全局作用域。这种链式结构允许函数访问外部作用域的变量,但不允许修改它们(除非外部作用域是全局的)。 函数调用...

    javascript 函数的暂停和恢复实例详解

    同时,如果某个函数使用了async关键字,那么调用它的函数也需要使用async关键字,这在代码中会产生连锁反应,使得所有调用者也必须同步化,这在某些情况下并不理想。 除了async/await,文章还讨论了利用throw和...

    JavaScript函数的调用以及参数传递

    JavaScript函数调用和参数传递是该语言的基础知识点,学习JavaScript的初学者必须掌握。函数在JavaScript中是头等公民,不仅可以被多次调用,还能将数据作为参数进行传递,并返回结果。这使得函数成为实现代码复用和...

    as2/3与js相互调用实例 源码

    AS3的`addCallback`方法和`call`方法分别用于设置可从JS调用的函数和从AS3调用JS函数。与AS2不同,AS3要求在发布时明确启用`allowScriptAccess`参数,以允许这种跨域交互。 3. **互调用的基本流程**: - **JS到AS*...

    js中函数调用的两种常用方法使用介绍

    在实践中,这两种函数调用方法非常常用,直接调用适用于快速简单的调用需求,而将函数赋值给变量则适用于需要更灵活控制函数执行的场景。了解并熟练掌握这两种调用方法,对于有效使用JavaScript语言进行开发至关重要...

    javascript的回调函数应用示例

    回调函数概念:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,...调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值

    回调函数被连续执行两次或多次的原因

    在编程领域,回调函数是一种常见的编程模式,它允许将函数作为参数传递给另一个函数,并在适当的时机由后者调用。这种模式非常有用,尤其是在处理异步操作时。然而,在某些情况下,可能会出现回调函数被连续执行两次...

    javascript函数集锦

    `call()`、`apply()`和`bind()`这三个函数都用于改变函数调用时的上下文,它们在实现函数封装和回调时非常有用。 在控制流程中,`if...else`、`switch`用于条件判断,`for`、`while`、`do...while`是循环结构,`...

Global site tag (gtag.js) - Google Analytics