函数在整个JavaScript中是最复杂也是最重要的知识,函数既可以调用也可以实例化的,既可以直接执行得到函数的返回值,也可以通过new操作符调用得到一个对象。对于一个函数来说,主要存在三种可能的角色:
1 | function Person() { |
普通函数,上面s1部分code, 把Person当做普通函数使用,执行的时候会形成私有的作用域,然后进行形参赋值、预解析、代码执行、执行完成后内存销毁;
构造函数, new操作符 + 构造函数来构造对象, 相当于其他面向对象语言(Java, C#等)中的class, 定义一个类来实例化对象。 上面代码s2部分code, 就是将Person作为构造函数去使用的, Jack是用Person构造函数构造的一个对象,Person构造函数有一个叫做prototype的属性是自己的原型,它的实例都可以指向自己的原型;
普通对象, Person 与 var obj = {} 中的obj一样,就是一个普通的对象(所有的函数都是Function的实例),它作为对象可以有一些自己的私有属性(如name, length),也可以通过proto找到Function.prototype.