1.为什么使用构造函数
什么是构造函数:是JavaScript创建对象的另外一种方式。
与字面量方式创建对象对比:构造函数可以创建出一些具有相同特征的对象。
举例:通过水果构造函数创建苹果、香蕉、橘子对象。其特点在于这些对象都基于同一个模板创建,同时每个对象又有自己的特征。
字面量的方式创建对象的特点
优势:简单灵活。
劣势:当需要创建一组具有相同特征的对象时,无法通过代码指定这些对象应该具有哪些相同的成员。
面向对象编程语言的实现模板的方式:利用类(class)创建模板,根据模板实现不同的对象(类的实例)。
JavaScript实现模板的方式1:通过工厂函数,在其内部通过字面量“{ }”的方式创建对象来实现,缺点是无法区分对象的类型。
JavaScript实现模板的方式2:通过构造函数创建对象。
2.JavaScript内置的构造函数
在学习如何自定义构造函数之前,先来看一下JavaScript内置的构造函数如何使用。
常见的内置构造函数:Object、String、Number等构造函数。
构造函数如何创建对象:new构造函数名()。
什么是实例化与实例:人们习惯将使用new关键字创建对象的过程称为实例化,实例化后得到的对象称为构造函数的实例。

“对象.constructor”属性指向了该对象的构造函数。
通过console.log()输出时,[nativecode]表示该函数的代码是内置的。
3.自定义构造函数
思考:如何自定义构造函数?
构造函数的命名推荐采用帕斯卡命名规则,即所有的单词首字母大写。
在构造函数内部,使用this来表示刚刚创建的对象。


4.私有成员
概念:在构造函数中,使用var关键字定义的变量称为私有成员。
特点:在实例对象后无法通过“对象.成员”的方式进行访问,但是私有成员可以在对象的成员方法中访问。
特性:私有成员name体现了面向对象的封装性。

5.函数中的this指向
this的特点:根据函数不同的调用方式,函数中的this指向会发生改变。
在JavaScript中,函数内的this指向通常与以下3种情况有关。
new关键字将函数作为构造函数调用时,构造函数内部的this指向新创建的对象。
直接通过函数名调用函数时,this指向全局对象(浏览器中表示window对象)。
如果将函数作为对象的方法调用,this将会指向该对象。
<script>
function Person(name,age){
this.name = name;
this.age = age;
this.sayHello = function()
{console.log(this.name + "你好 !")};
}
var p1 = new Person("Jack",18);
var p2 = new Person("Alice",19);
console.log(p1);
console.log(p2);
p1.sayHello();
console.log(p1.constructor);
</script>

