`

javascript随心总结 arguments,call与apply

阅读更多
        //js杂谈
	//主要想到什么就写下来
        //测试的版本还是chrome  多少忘了
	//第一个arguments
	
	//第一个作用
	var toString={}.toString;
	var slice=[].slice;
	function  aa(){
		console.info(arguments.callee);//返回的是这函数aa引用
		//下面两个证明他是非常像数组
		console.info(arguments);
		console.info(arguments.length);
		//为什么不是数组呢
		console.info(toString.call(arguments));//[object Arguments]  到此如何
		//转化为数组//突然想到为什么能转化数组- -,写着写着就想到了这个
		console.info(slice.call(arguments));
		console.info(toString.call(slice.call(arguments)));//[object Array]
	}
	aa();
	//有什么用呢,递归有用
	//1-n的乘法
	function bb(n){
		if(n==1){
			return 1;
		}
		return n*arguments.callee(n-1);
	}
	console.info(bb(5));// 是不是特别像数组 但不是真正的数组
	
	//还有strict mode ,会被禁用,不过严格模式在火狐下会有bug
	
	//第二个 看过我以前写的博客的朋友,都应听到类数组这个东东
	//像数组的对象
	aa("a","b","c","d");
	
	//好吧我们将其变为真的数组
	//我记得在数组总结中有这样的方法slice
	
	//当然根据arguments可实现像java这样的重载功能
	//就是根据arguments参数长度,和其值执行不同的操作
	//不地感觉怎么就是感觉不妥 = =
	
	//第二个就是call 与apply
	//二者有一个不同,就是第一个要一个一个的传参,第二个可以传个arguments
	//传参不是这两个函数的真面目
	//可以随时函数执行的上下文环境  是不是很厉害
	var x="window";
	var obj1={
		x:"xx",
		xxxx:window.alert,
		xx:function(){
			alert(this.x);
		},
		xxx:function(){
			//alert(this);//object
			alert(x);
		}
	};
	var obj2={
		x:"xx2",
		xx:function(){
			alert(this.x);
		},
		xxx2:function(){
			
			alert(x);
		}
	};
	//看变化
	obj1.xx();
	obj1.xx.call(this);
	obj1.xx.call(obj2);
	//再来三个,有什么差别
	//obj1.xxx();
	//obj1.xxx.call(this);
	//obj1.xxx.call(obj2); //弹出来都是window
	//alert方法在window,所以这个上下文
	//上下文环境由调用时决定
	//感觉也可以离解为一个方法里又包了一个alert函数,由闭包的意思,所以上下文为window
	//若有错误请指出
	
	var a=window.alert;
	console.info(a);
	//a.call(obj1,x);//我想是js原生的一些方法不允许修改,想证明就是不行呢
       //到此结束

 

分享到:
评论

相关推荐

    javascript中apply和call方法的作用及区别说明

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments

    跟我学习javascript的call(),apply(),bind()与回调

    JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别...

    javascript利用apply和arguments复用方法

    主要介绍了javascript利用apply和arguments复用方法,有需要的朋友可以参考一下

    Javascript 中的 call 和 apply使用介绍

    apply第一个参数传对象,参数可以是数组或者arguments 对象。 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 代码如下: function Person(name,age){ this.name = name; this.age=...

    javascript下arguments,caller,callee,call,apply示例及理解

    在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数。 [function.]arguments[n] 参数function :选项。当前正在执行的 Function 对象...

    Javascript中的arguments与重载介绍

    主要介绍了Javascript中的arguments与重载介绍,本文讲解了Javscript 重载、Javascript arguments不是一个数组等内容,需要的朋友可以参考下

    JS中call/apply、arguments、undefined/null方法详解

    主要介绍了JS中call/apply、arguments、undefined/null方法详解的相关资料,需要的朋友可以参考下

    Javascript中arguments对象的详解与使用方法

    ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在 函数体内 ...这篇文章将详细介绍Javascript中的arguments对象和使用方法。

    javascript中call apply 的应用场景

    在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要...

    详解JavaScript函数callee、call、apply的区别

    arguments.callee 关于callee的解释:callee 是 arguments 对象的一个属性。可以用于引用该函数的函数体内当前正在执行的函数。这在函数的名称是未知时很有用,例如在没有名称的函数表达式 (也称为“匿名函数”)内...

    javascript内置对象arguments详解

    主要介绍了javascript内置对象arguments,实例讲解arguments是什么怎么用,需要的朋友可以参考下

    【JavaScript源代码】JavaScript中arguments的使用方法详解.docx

    JavaScript中arguments的使用方法详解  js这是一门弱语言,不像其他语言如c,java等,有严格的规范, 所以现在也流传着一种说法,js本来就不是一种语言; 说回arguments,它是js中函数内置的一个对象,而执行函数...

    全面了解构造函数继承关键apply call

     apply和call的区别在哪里  2. apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. apply:方法能劫持另外一个对象的...

    JavaScript函数apply()和call()用法与异同分析

    本文实例分析了JavaScript函数apply()和call()用法与异同。分享给大家供大家参考,具体如下: JavaScript的函数是对象,因此有属性和方法。每个函数都包含两个属性:length和prototype,每个函数都包含两个非继承而...

    xiangxiong#blog#JavaScript深入之类数组对象与arguments1

    JavaScript深入之类数组对象与argumentsJavaScript深入系列第十三篇,讲解类数组对象与对象的相似与差异以及arguments的注意要点类

Global site tag (gtag.js) - Google Analytics