Skip to content

Instantly share code, notes, and snippets.

@democ
Created April 1, 2014 00:45
Show Gist options
  • Save democ/9905585 to your computer and use it in GitHub Desktop.
Save democ/9905585 to your computer and use it in GitHub Desktop.

都说所有的function是一个object?

看下面这段代码很难把function与一个object相联系在一起,以为object最本质key/value没有体现出来:

  var greet = function(){
    alert('Heloo, my friend.');
  }

在这里所创建的function只是包裹了statement,然后可以执行的代码罢了.好像根本和object没关系啊.

但是function在JS中确实表现的跟普通的object没区别. 可以作为变量的值,可以存在object,array中.可以当做函数的参数.可以被其他函数当做值返回.function还可以有方法(method).问题就出在当function作为一个可以被调用的东西时我们就觉得function不是object了.就是以上那个例子.

那么到底如何来解释function也是一个object么.

其实每个function创建时都和两个看不见的属性息息相关: 1)the function's context 2)the code that implements the function's behavior.

每个function创建时都会有一个prototype属性.你可以这样拿到它:

  greet.prototype
  // Object {}

  greet.prototype.constructor
  // function(){alert('Hello, my friend');}

它的值是一个object.这个object有一个名为constractor的key,值是这个function本身.(注:这里的prototype和Function.prototype有所不同)

调用function的方式之 构造调用

如果一个function使用关键词 new来调用,会新创建一个object,这个object会有秘密的链接到function的prototype.this值会绑定到这个新创建的object上.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment