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

来源:互联网 发布:ubuntu 16 lnmp 编辑:程序博客网 时间:2024/05/08 11:14

函数

  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
原创粉丝点击