1.工厂模式创建对象
function createPerson(name, age, hobby) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.hobby = hobby
obj.say= function () {
console.log(this.name + "喜欢" + hobby);
};
return obj;
}
// 测试
var p1=createPerson('张三',22,'踢足球');
var p2=createPerson('李四',18,'打游戏');
p1.say();//张三喜欢踢足球
p2.say();//李四喜欢打游戏
console.log(p1 instanceof Object);//true
console.log(p1 instanceof createPerson);//false
工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,用instanceof只能辨别实例是一个对象,而无法辨别这个实例是谁的对象。而且每生成一个实例就会增加一些重复的内容,会造成资源浪费。
2.自定义构造函数创建对象
function Person(name,age,hobby){
this.name=name;
this.age=age;
this.hobby=hobby;
this.say=function(){
console.log(this.name + "喜欢" + hobby);
}
}
var p1=new Person('张三',22,'踢足球');
var p2=new Person('李四',18,'打游戏');
p1.say();//张三喜欢踢足球
p2.say();//李四喜欢打游戏
console.log(p1 instanceof Object);//true 即p1是Object的实例
console.log(p1 instanceof Person);//true 即p2是Person的实例
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。使用构造函数时要注意以下几点:
1.构造函数首字母要大写(推荐做法)。
2.构造函数要和new一起使用才有意义。
3.构造函数的作用是用于实例化一个对象,即给对象添加属性和方法。
使用new操作符给 Person创建一个新实例会经历以下四个步骤:
(1)创建一个新对象
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
(3)执行构造函数中的代码(为这个新对象添加属性)
(4)返回新对象
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍