使用工厂方法
通过该方法可以大批量的创建对象。
例:
function createPerson(name,age,gender){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.getName=function(){
console.log(name)
}
return obj;
}
var obj1=createPerson("乔巴",10,"公");
var obj2=createPerson("索隆",20,"男");
obj1.getName();
obj2.getName();
使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object这个类型,这就导致我们无法区分出多种不同类型的对象。
构造函数
创建一个构造函数,专门用来创建Person对象
构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯首字母大写。
构造函数和普通函数的区别就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
构造函数的执行流程:
1.立刻创建一个新的对象
2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回
使用同一个构造函数创建的对象,我们称之为一类对象,也将一个构造函数称为一个类,我们将通过一个构造函数创建的对象称为是该类的实例。
例:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.getName=function(){
console.log(name)
}
}
var p1=new Person("路飞",18,"男");
var p2=new Person("娜美",16,"女");
console.log(p2);
function Dog(){}
var dog=new Dog();
console.log(dog);
// 使用instanceof可以检查一个对象是否是一个类的实例
console.log(p1 instanceof Person);
所有的对象都是Object的后代,所以任何对象和Object做instanceof检查时都会返回true。
构造函数修改:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
// this.getName=fun;
}
// 将getName方法在全局作用域中定义
// 可以使所有的对象共享一个方法
// 但是将函数定义在全局作用域,污染了全局作用域的命名空间,
// 而且定义在全局作用域中也很不安全
// function fun(){
// alert(this.name)
// }
// 像原型中添加getName方法
Person.prototype.getName=function(){
alert(this.name);
}
var p1=new Person("路飞",18,"男");
var p2=new Person("娜美",16,"女");
p2.getName();
p1.getName();