javascript忍者秘籍-第三章笔记(函数的基础)
2018-01-19 10:21
567 查看
javascript忍着秘籍笔记
在函数内部他们可以像卡显示命名参数一样使用
如果在你浏览器中调试时,你就会发生他们是真实存在对象中的
而函数调用几种方式呢?
作为一个函数进行调用,是最简单的形式。
作为一个方法进行调用,在对象上进行调用,支持面向对象编程。
作为构造器进行调用,创建一个新对象。
通过apply()或call()方法进行调用,这种方式很复杂,遇到的时候我们将会再讨论
作为一个函数进行调用,是最简单的形式。
一般情况下,也是这种用法
如:
而他们的this,也就是window
作为一个方法进行调用
而还有一种就是作为函数中的方法被调用,这个时候this是函数
如:
作为构造器进行调用
构造器被调用的时,就会发生下面行为:
创建一个新的空对象
传递给构造器的对象是this参数,从而成为构造器的函数上下文
如果没有显示的返回值,新创建的对象则作为构造器进行返回
作为构造器进行调用,this就是该对象
使用apply()和call()方法进行调用
在函数调用的时候,javascript为我们提供了一种方式,可以显示指定任何一个对象作为其函数上下文,javascript的每个函数都有apply()和call()方法
apply()传入两个参数:
函数上下文的对象
作为函数参数所组成的数组
Call()方法使用方法类似,唯一不同的是给函数传入的参数是一个参数而不是列表,而不是单个数组
例子:
从最后的测试可以看出:结论是正确的
ninja1和ninja2把上下文给传进去了
而juggle方法也成功在上下文添加了一个result
当然最后的计算结果也是一样的
函数调用传递的两个隐式参数argument,this
隐式:意味着这些参数不会显示列在函数签名里,但是它们默默地传递给函数并存在函数作用域内。在函数内部他们可以像卡显示命名参数一样使用
如果在你浏览器中调试时,你就会发生他们是真实存在对象中的
arguments参数
他只是一个类数组,只是拥有部分特性,你能数组形式去获取(arguments[0]得到第一个参数),也能for循环遍历,但他就不是数组this参数
this称为调用者的上下文而函数调用几种方式呢?
作为一个函数进行调用,是最简单的形式。
作为一个方法进行调用,在对象上进行调用,支持面向对象编程。
作为构造器进行调用,创建一个新对象。
通过apply()或call()方法进行调用,这种方式很复杂,遇到的时候我们将会再讨论
作为一个函数进行调用,是最简单的形式。
一般情况下,也是这种用法
如:
function ninja(){}; ninja();
而他们的this,也就是window
作为一个方法进行调用
而还有一种就是作为函数中的方法被调用,这个时候this是函数
如:
var creep=function ninja(){}; var sneak={ skulk:creep } sneak.skulk();//skulk的this就是sneak对象
作为构造器进行调用
构造器被调用的时,就会发生下面行为:
创建一个新的空对象
传递给构造器的对象是this参数,从而成为构造器的函数上下文
如果没有显示的返回值,新创建的对象则作为构造器进行返回
作为构造器进行调用,this就是该对象
function Ninja(){ this.skulk=function(){ return this; } } var ninja1=new Ninja(); assert(ninja1.skulk()===ninja1);//通过
使用apply()和call()方法进行调用
在函数调用的时候,javascript为我们提供了一种方式,可以显示指定任何一个对象作为其函数上下文,javascript的每个函数都有apply()和call()方法
apply()传入两个参数:
函数上下文的对象
作为函数参数所组成的数组
Call()方法使用方法类似,唯一不同的是给函数传入的参数是一个参数而不是列表,而不是单个数组
例子:
function juggle(){ var result=0; for(var n=0;n<arguments.length;n++){ result+=argument ; } this.result=result; } var ninja1={}; var ninja2={}; juggle.apply(ninja1,[1,2,3,4]); juggle.call(ninja2,1,2,3,4); assert(ninja1.result===10);//通过 assert(ninja2.result===26);//通过
从最后的测试可以看出:结论是正确的
ninja1和ninja2把上下文给传进去了
而juggle方法也成功在上下文添加了一个result
当然最后的计算结果也是一样的
相关文章推荐
- JavaScript忍者秘籍笔记01之函数
- javascript忍者秘籍之第四章笔记(函数进阶)
- react native 开发基础=javaScript=学习笔记----函数
- javascript基础笔记(十四)之js的全局函数
- JavaScript基础笔记(五) 函数表达式
- [翻译]javascript学习笔记 (一)-函数基础
- JavaScript 基础笔记 2函数传参
- javascript学习笔记 (一)-函数基础
- JavaScript忍者秘籍笔记03之正则表达式
- javascript基础笔记一函数
- 【学习笔记】javascript 基础篇 变量 运算符 函数
- JavaScript忍者秘籍——函数(上)
- JavaScript 笔记(1) -- 基础 & 函数 & 循环 & ...
- javascript基础笔记(七)之js的函数
- JavaScript忍者秘籍——函数(下)
- JavaScript基础学习笔记(二)——操作符、语句、函数
- javascript忍者秘籍之第五章笔记(闭包)
- javascript高级程序设计学习笔记--第三章对象基础
- javascript学习笔记四:javascript中的函数(对象)
- javascript高级编笔记第二章第三章