1、构造函数:是一种特殊的函数主要用来在创建对象时初始化对象,即为对象的成员变量附初始值总与new运算符一起使用在创建对象的语句中。
注意:构造函数用于创建一类对象首字母要大写;构造函数要和new一起使用才有意义。
2、创建对象有两种方式:字面量创建、构造函数创建
字面量创建对象非常鈈灵活每次创建新的对象都要语句完整,不便于创建大量类型相同的对象不利于使用继承等高级特性。
new 运算符在调用构造函数是做了4件事:
①、创建一个新的类型为Action的空对象obj1;
②、new让this指向了创建的新对象将构造函数的作用域赋给新对象;
③、执行构造函数,目的是给噺的对象添加属性和方法(将这个空对象的__proto__成员指向了构造函数对象的prototype成员对象);最关键的一步
3、为什么要使用构造函数
将新生成的對象的__proto__属性赋值为构造函数的prototype属性,使得通过构造函数创建所有对象可以共享相同的原型这意味着同一个构造函数创建的所有对象都继承自一个相同的对象,因此它们都是同一个类的对象
在JavaScript标准中,并没有__proto__属性不过它下载已经是一些主流的JavaScript执行环境默认的一个标准屬性,用于指向构造函数的原型该属性是默认不可见的,而且在各执行环境中实现的细节不尽相同例如IE浏览器不存在该属性。我们只偠知道JavaScript对象内部存在指向构造函数原型的指针就可以了这个指针实在调用new表达式的时候自动赋值的,并且我们不应该去修改它
在構造对象的四个步骤中,我们可以看到除了第三步意外别的步骤我们无须借助new表达式实现,因此new表达式不仅仅是对这四个步骤的简化吔是要实现继承的必经之路。
注意:构造函数也是函数因此也可以被直接调用,但是它的返回值为undefined此时构造函数里面的对象等于全局this對象。