jquery 笔记

本文详细介绍了JavaScript中函数的相关特性,包括$(document).ready的简写方式、arguments对象的使用及callee属性、apply与call方法的区别,以及this指针的概念等。

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

1。$(document).ready(function(){});可以简写为$(function(){}))。$(document)可以简写为$()

2.

传递给函数的隐含参数:arguments

当进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。arguments是一个类似数组但不是数组的对象,说它类似 是因为它具有数组一样的访问性质,可以用arguments[index]这样的语法取值,拥有数组长度属性length。arguments对象存储的 是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,例如:

function func(a,b){
   alert(a);
   alert(b);
   for(var i=0;i<arguments.length;i++){
      alert(arguments[i]);
   }
}
func(1,2,3);

代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编程带来了很大的灵活性。

3. arguments对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性,例如使用递归来计算1到n的自然数之和:

var sum=function(n){
    if(1==n)return 1;
    else return n+sum(n-1);
}
alert(sum(100));

其中函数内部包含了对sum自身的调用,然而对于JavaScript来说,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,所以使用arguments.callee属性会是一个较好的办法:

var sum=function(n){
    if(1==n)return 1;
    else return n+arguments.callee(n-1);
}
alert(sum(100));

4.

callee属性并不是arguments不同于数组对象的惟一特征,下面的代码说明了arguments不是由Array类型创建:

Array.prototype.p1=1;
alert(new Array().p1);
function func(){
    alert(arguments.p1);
}
func();

运行代码可以发现,第一个alert语句显示为1,即表示数组对象拥有属性p1,而func调用则显示为“undefined”,即p1不是arguments的属性,由此可见,arguments并不是一个数组对象。

5.

函数的apply、call方法和length属性

JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:

Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);

从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一 个对象的方法运行的目的。两个方法除了thisArg参数,都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方 式:

//定义一个函数func1,具有属性p和方法A
function func1(){
    this.p="func1-";
    this.A=function(arg){
       alert(this.p+arg);
    }
}
//定义一个函数func2,具有属性p和方法B
function func2(){
    this.p="func2-";
    this.B=function(arg){
       alert(this.p+arg);
    }
}
var obj1=new func1();
var obj2=new func2();
obj1.A("byA");  //显示func1-byA
obj2.B("byB");  //显示func2-byB
obj1.A.apply(obj2,["byA"]); //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同
obj2.B.apply(obj1,["byB"]); //显示func1-byB
obj1.A.call(obj2,"byA"); //显示func2-byA
obj2.B.call(obj1,"byB"); //显示func1-byB

可以看出,obj1的方法A被绑定到obj2运行后,整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。

6.

与arguments的length属性不同,函数对象还有一个属性length,它表示函数定义时所指定参数的个数,而非调用时实际传递的参数个数。例如下面的代码将显示2:

function sum(a,b){
    return a+b;
}
alert(sum.length);

7.

深入认识JavaScript中的this指针

this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值