javascript学习笔记:函数与方法
2014-08-04 16:37
323 查看
函数:
1、arguments:代表参数,不是数组,但是具有length属性,可以用下标[]访问
2、arguments.callee:当前正在执行的函数
3、arguments中的元素与参数是同义词
function(a,b){};argument[0]就是a,改变任何一个,另一个都改变了
4、函数的参数类型不需要指定(不同于静态语言)
方法:
1、当一个函数在一个对象上调用的时候,这个函数称为方法。(这应该不是定义吧,但是《javascript权威指南(第五版)》就这么写的)。
2、方法的重要特点:
在方法体中,关键字this的值就是调用方法的对象(这个跟java没有区别)。
对于不是方法的函数来说,this关键字引用全局对象。这个还好理解,相当于全局对象是这一类函数的调用对象。
书上的例子,this值得注意。
下面是一个改造的例子,说明:当一个函数作为函数而不是方法调用的时候,this关键字引用全局对象。
以上代码在定义了o之后,调用了o的方法calculator,而在calculator内部定义了一个嵌套函数compute,它是作为函数而非方法存在的,定义之后直接调用。
在calculator方法中,this指向的调用它对象(就是o引用的对象),这符合方法的特点。
compute也是作为函数而不是方法来调用的,因此这里this引用的是全局对象。
控制台打印的结果也印证了第二点。最后一行console.log(this)和compute中的console.log(this)都打印出window。
关于嵌套函数中this的说明,《javascript权威指南(第五版)》中文版说的有点绕口,我理认真看了三遍才明白,原文如下:
“当一个函数作为函数而不是方法调用的时候,这个this关键字引用全局对象。容易令人混淆的是,当一个嵌套的函数(作为函数)在一个包含的函数之中调用,而这个包含的函数却是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但是它却(不太直观地)引用嵌套的函数体的内部的全局对象。”
要理解这段话,首先要弄明白去嵌套的函数和包含的函数,嵌套函数不用说了,包含的函数其实就是指外部函数,这个名字不好理解,叫外部函数就好了。
1、arguments:代表参数,不是数组,但是具有length属性,可以用下标[]访问
2、arguments.callee:当前正在执行的函数
3、arguments中的元素与参数是同义词
function(a,b){};argument[0]就是a,改变任何一个,另一个都改变了
4、函数的参数类型不需要指定(不同于静态语言)
方法:
1、当一个函数在一个对象上调用的时候,这个函数称为方法。(这应该不是定义吧,但是《javascript权威指南(第五版)》就这么写的)。
2、方法的重要特点:
在方法体中,关键字this的值就是调用方法的对象(这个跟java没有区别)。
对于不是方法的函数来说,this关键字引用全局对象。这个还好理解,相当于全局对象是这一类函数的调用对象。
书上的例子,this值得注意。
var calculator = { operand1:1, operand2:1, compute:function(){ this.result = this.operand1 + this.operand2; //在compute内部,this仍然是指 calculator指向的对象 } }; calculator.compute(); console.log(calculator.result);
下面是一个改造的例子,说明:当一个函数作为函数而不是方法调用的时候,this关键字引用全局对象。
var o = { a:1, calculator : function(){ console.log(this);//Object { a=1, calculator=function()} function compute(){ console.log(this);//Window about:ntab }; compute(); } }; o.calculator(); console.log(this);//Window about:ntab
以上代码在定义了o之后,调用了o的方法calculator,而在calculator内部定义了一个嵌套函数compute,它是作为函数而非方法存在的,定义之后直接调用。
在calculator方法中,this指向的调用它对象(就是o引用的对象),这符合方法的特点。
compute也是作为函数而不是方法来调用的,因此这里this引用的是全局对象。
控制台打印的结果也印证了第二点。最后一行console.log(this)和compute中的console.log(this)都打印出window。
关于嵌套函数中this的说明,《javascript权威指南(第五版)》中文版说的有点绕口,我理认真看了三遍才明白,原文如下:
“当一个函数作为函数而不是方法调用的时候,这个this关键字引用全局对象。容易令人混淆的是,当一个嵌套的函数(作为函数)在一个包含的函数之中调用,而这个包含的函数却是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但是它却(不太直观地)引用嵌套的函数体的内部的全局对象。”
要理解这段话,首先要弄明白去嵌套的函数和包含的函数,嵌套函数不用说了,包含的函数其实就是指外部函数,这个名字不好理解,叫外部函数就好了。
相关文章推荐
- javascript学习笔记—DOM常用API、属性、方法、函数
- javascript学习笔记:函数与方法2
- JavaScript 函数的call()方法的学习笔记
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- [翻译]javascript学习笔记 (一)-函数基础
- javascript学习笔记 (一)-函数基础
- Javascript学习笔记三 之 函数
- C#学习笔记------Visual C#常用函数和方法
- JavaScript 学习笔记之函数理解二
- JavaScript高级程序设计学习笔记3: Math对象比较常用的几个方法
- javaScript学习笔记之 javaScript 常见方法 记录
- Javascript学习笔记之函数重载和类型检查
- JavaScript across domain 方法 学习笔记
- JavaScript中的继承学习笔记(1):Crockford uber方法中的陷阱
- [ADO学习笔记] Connection对象的函数与方法
- JavaScript学习笔记 6-循环、数组和函数 Loops , Arrays and Function
- Javascript学习笔记2——函数
- JavaScript 学习笔记(九)call和apply方法
- Javascript 学习笔记2 —— 函数
- 【Javascript学习笔记】由JavaScript中call()方法引发的对面向对象继承机制call的思考