`
lee3836
  • 浏览: 67488 次
  • 性别: 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函数的解释

    javascript函数的解释,解释了具体函数的功能,一、函数JavaScript函数集合 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document-&gt;html-&gt;(head,body) 4.一个浏览器窗口中的DOM顺序是:...

    javascript的回调函数应用示例

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

    JavaScript this 深入理解

    函数调用者与所有者 JavaScript 中函数(function) 存在调用者 与 所有者这两个概念,调用者是指调用函数的对象,通常是一个指向调用了当前函数的函数的引用,如果是顶层调用,那么caller=null, 大部分浏览器的...

    JavaScript王者归来part.1 总数2

     6.3 函数的调用者和所有者   6.3.1 函数的调用者   6.3.2 函数的所有者--一个为函数指定所有者的例子   6.3.3 动态调用--外来的所有者   6.4 函数常量和闭包   6.4.1 匿名的函数   6.4.2 函数引用  ...

    深入理解Node.js 事件循环和回调函数

    Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。Node.js 单线程类似进入一个while(true)的事件循环,直到...

    超轻量压缩传输js2java rpc框架(XtZPStream v1.0)

    特点: ...6、支持回调全异步(观察者模式):所有的过程调用都采用异步方式, 可以指定回调函数,用来接收返回的对象,并进行其他处理 7、日志回调:L异步过程可以设置日志回调函数,让你掌控全过程

    浅谈JavaScript中的this指针和引用知识

    在JavaScript中,this表示当前上下文,即调用者的引用 ********this永远指向的是(函数对象)的所有者 this和全局对象: var a = 1; function foo(){ var b = 2; console.log(this.a+b);//3 } foo(); //foo函数所有者是...

    logdna-cos:Node.js函数,用于将所有日志文件从云对象存储发送到LogDNA

    将日志从Cloud Internet Services导入LogDNA IBM Cloud:trade_mark:企业计划... 每当CIS将对象上传到IBM Cloud Object Storage存储桶时,触发器就会调用您的函数,该函数处理日志包并将其自动发送到LogDNA实例。

    nanoguard:小型模块,可让您保护对函数的调用

    纳米卫士小型模块,可让您保护对函数的调用。 npm install nanoguard用法const Nanoguard = require ( 'nanoguard' )const guard = new Nanoguard ( )guard .... 非监护人的所有者可以使用它来推迟监护

    js 字符串转化成数字的代码

    转换函数: js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。 一些...

    multicall.js:Multicall.js

    Multicall.js是一个轻量级JavaScript库,用于与智能合约进行交互。 多重调用允许将多个智能合约常量函数调用分组为单个调用,并将结果汇​​总为单个结果。 如果使用像Infura这样的远程节点,这将减少需要通过网络...

    Javascript中的arguments对象

    在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量。 1、什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的... 调用者不必区分每个

    Javascript之this关键字深入解析

    首先,我先抛出一个定论:”在Javascript中,This关键字永远都指向函数(方法)的所有者”。 函数 代码如下:function introduce() { alert&#40;“Hello, I am Laruence\r\n”&#41;;}对于这个函数,this关键字指向谁呢...

    事件高级用法及兼容写法

    this 指事件调用者 同名事件的执行顺序:先添加先执行 2.attachEvent 事件名需要添加on前缀 不能选择冒泡或捕获的机制 this 指window对象 同名事件的执行顺序:后添加先执行 三、事件流 事件流:事件被触发之后会在...

    程序天下:JavaScript实例自学手册

    14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 ...

    js-prototypes:JavaScript原型简介

    this:指在运行时调用它的函数(javascript中的一个对象) 新的: 创建一个新的调用函数实例 执行新实例的构造函数逻辑,函数内部存在的“ this”现在要指的是什么? 该函数的新创建实例 返回新实例 prototype:...

    《程序天下:JavaScript实例自学手册》光盘源码

    14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 ...

    深入浅析Node.js 事件循环

    Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,...

    ReSharper.ReJS:JavaScript 重构

    ####Detect 函数调用具有与函数所有者相同的上下文的Function.prototype.call 。 例子 var x = { someMethod : function ( ) { //something } } ; x . someMethod . call ( x , 1 , 2 , 3 ) ; 插件将建议更换...

    微软JavaScript手册

    length 属性 (Arguments) 返回由调用者传递给函数的实际参数个数。 length 属性 (Array) 返回比数组中所定义的最高元素大 1 的整数值 。 length 属性 (Function) 返回为函数所定义的参数个数。 length 属性 ...

Global site tag (gtag.js) - Google Analytics