函数拾遗——Javascript 进阶知识整理

函数

  1. 函数也是一个对象,事实上,JS拥有函数的类型,可以通过var fun=new Function(args,fun_body)的形式定义一个函数。函数作为一个对象,有所有对象所共有的性质,同时,函数还有一个特性:可以被调用执行。
  2. 函数作为一个对象的方法
    一个疑点:当函数作为一个对象的方法时,函数的函数名还是否有意义?因为一般函数作为对象的方法之后,对函数的引用都是通过对象的方法名的。
    首先,明确一点,函数的函数名是自己本身拥有的属性,无论外部使用情况如何不会改变。形如
function Q(){
    this.setQ=function(){};
}

的对象,内部的函数是没有函数名的(每一个函数有一个name的属性保存自己的函数名,匿名函数的name是“”),而对象的方法setQ引用了这个匿名函数,这是两个部分。

之后,我们继续函数当作对象的方法后,函数名还有没有用的讨论。
当函数在形如

function Q(){
    this.setQ=function set(){};
}

set的形式中时,不再是匿名函数,拥有函数名,通过函数名set,函数可以与setQ这个对象属性区别开,但是与正常声明的函数还是有些不同,比如函数名的作用域只限于set函数内部,其他地方引用set只会产生变量未定义错误。

之所以提这个点,是因为如下的使用情况:

var ninja={
    chirp:function(){
        //do something
    }
}
var samurai={
    chirp:ninja.chirp
}

在这种情况下,一个对象引用的另一个对象的方法作为自己的方法,那么,在chirp内部,它如何引用自身呢?一种较为通用的解决方法是使用this指针,this指针是指向运行是调用函数的对象的指针,通过使用this.chirp可以获得自身。第二种方式就是使用函数名,通过自己的函数名引用自身,确保函数可以找到自己。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值