使用工厂方法创建的对象,使用的构造函数都是 Object
我们创建的对象都是 Object 这个类型
导致我们无法区分多种不同类型的对象
创建一个构造函数,专门用来创建 Person 对象
构造函数就是一个普通的函数,创建方式和普通函数没有区别
不同的是,构造函数习惯上首字母大写
function Person(name,age){
this.name = name;
this.age = age;
console.log(this);
}
var obj1 = new Person("孙悟空",18);
var obj2 = new Person("猪八戒",38);
console.log(obj1.name);
console.log(obj2);
构造函数和普通函数的区别就是调用的方式不同
- 普通函数是直接调用,而构造函数需要使用 new 关键字来调用
构造函数执行流程:
- 立即创建一个新的对象
- 将新建的对象设置为函数的 this,在构造函数中可以使用 this 来引用新建的对象
- 逐行执行函数中的代码
- 将新建的对象作为返回值返回
使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类
语法:
对象 instanceof 构造函数
- 是返回 true,否则 false
- 所有的对象都是 Object 的后代
- 任何对象和 Object 做 instanceof 检查时都会返回 true
function Person(name,age){ this.name = name; this.age = age; console.log(this); } var obj1 = new Person("孙悟空",18); var obj2 = new Person("猪八戒",38); console.log(obj1.name); console.log(obj2); console.log(obj1 instanceof Object); // true
this 的情况:
- 当以函数的形式调用时,this 是 window
- 当以方法的形式调用时,谁调用方法 this 就是谁
- 当以构造函数的形式调用时, this 就是新建的那个对象