js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

普通方法创建对象

var obj = {
name:"猪八戒",
sayname:function () {
alert(this.name);
}
}

var obj1 = {
name:"沙和尚",
sayname:function () {
alert(this.name);
}
}

var obj2 = {
name:"孙悟空",
sayname:function () {
alert(this.name);
}
}
obj.sayname()
obj1.sayname()
obj2.sayname()

使用工厂方法创建一个对象

通过该方法可以大批量创建新对象

函数ren(name,gender)能够根据接受的参数来构建一个包含所有必要信息的 Person 对象。可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建\多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。 

  主要好处就是可以消除对象间的耦合,通过使用工程方法而不是new关键字。将所有实例化的代码集中在一个位置防止代码重复。

  工厂模式解决了重复实例化的问题 ,但还有一个问题,那就是识别问题,因为根本无法 搞清楚他们到底是哪个对象的实例

function ren(name,gender) {
var dx = new Object();
dx.name = name,
dx.gender = gender,
dx.sayname = function(){
console.log(this.name)
};00                          
return dx;
}
var a = ren("悟空","")
a.sayname()

构造函数

使用工厂方法创建的对象,使用的构造函数都是Object
所以创建的对象都是object这个类型
就导致我们无法区分多种不同类型的对象这儿就讲到构造函数
创建一个构造函数就是一个普通的函数,创建方式和普通的函数没有什么区别,不同的是构造函数习惯首字母大写
构造函数和普通函数的区别就是调用函数的方式不同普通函数是直接调用,而构造函数需要使用new关键自来使用
构造函数执行流程
1.立刻创建一个新的对象
2.将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回

function Person(name){
this.name = name,
this.sayname = fun

}
function fun(){
console.log(this.name);
}
var per = new Person("旺财");
var per1 = new Person("旺财");
var per2 = new Person("旺财");
console.log(per);
console.log(per1);
console.log(per2);

猜你喜欢

转载自www.cnblogs.com/niuyaomin/p/12007358.html