使用工厂方法创建对象
使用工厂方法创建对象 方便批量创建对象
创建的对象都是object这个类型 就导致无法区分多种不同的类型
function createPerson(name, age, gender) {
//创建一个新的对象
let obj = new Object();
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function () {
console.log(this.name);
}
//将新的对象返回
return obj;
}
let obj1 = createPerson('fj', 23, 'female');
let obj2 = createPerson('qyd', 23, 'female');
obj1.sayName(); //fj
obj2.sayName(); //qyd
构造函数
构造函数就是一个普通的函数,创建方式和普通函数没有区别
不同的是构造函数习惯上首字母大写
构造函数与普通函数的区别在于调用方式的不同
普通函数是直接调用,而构造函数需要new关键字来调用
//创建一个构造函数,专门用来创建Person对象
function Person() {}
let per = Person();
console.log(per); //undefined
----------------------
function Person() {}
let per = new Person();
console.log(per); //Person {}
构造函数的执行流程:
- 立即创建一个新的对象
- 将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
- 逐行执行函数中的代码
- 将新的对象作为返回值返回
function Person() {
alert(this);
}
let per = new Person();
console.log(per); //Person {}
使用同一个构造函数创建的对象,称为一类对象、该类的实例或者该构造函数的实例,也将一个构造函数称为一个类。
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender,
this.sayName = function () {
console.log(this.name);
}
}
function Dog() {}
let per = new Person('fj',23,'female');
console.log(per);
let dog = new Dog();
console.log(dog);
使用instanceof可以检查一个对象是否是一个类的实例
console.log(per instanceof Person); //true
console.log(dog instanceof Person); //false
console.log(dog instanceof Object); //true