javascript忍者秘籍-第三章笔记(函数的基础)

javascript忍着秘籍笔记

函数调用传递的两个隐式参数argument,this

隐式:意味着这些参数不会显示列在函数签名里,但是它们默默地传递给函数并存在函数作用域内。

在函数内部他们可以像卡显示命名参数一样使用

如果在你浏览器中调试时,你就会发生他们是真实存在对象中的

arguments参数

他只是一个类数组,只是拥有部分特性,你能数组形式去获取(arguments[0]得到第一个参数),也能for循环遍历,但他就不是数组

this参数

this称为调用者的上下文

而函数调用几种方式呢?

  1. 作为一个函数进行调用,是最简单的形式。
  2. 作为一个方法进行调用,在对象上进行调用,支持面向对象编程。
  3. 作为构造器进行调用,创建一个新对象。
  4. 通过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[n];
 }
 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

当然最后的计算结果也是一样的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值