javascript的工厂模式和构造函数的区别

JavaScript032

javascript的工厂模式和构造函数的区别,第1张

先给你介绍下JS常用的几种模式

1.原始模式

    //1.原始模式,对象字面量方式

var person = { 

    name: 'Jack',

    age: 18,

    sayName: function () { alert(this.name) }

}

//1.原始模式,Object构造函数方式

var person = new Object()

person.name = 'Jack'

person.age = 18

person.sayName = function () {

    alert(this.name)

}

/*显然,当我们要创建批量的person1、person2……时,

每次都要敲很多代码,资深copypaster都吃不消!

然后就有了批量生产的工厂模式。*/

2.工厂模式

//2.工厂模式,定义一个函数创建对象

function creatPerson (name, age) {

    var person = new Object() 

    person.name = name

    person.age = age

    person.sayName = function () {

        alert(this.name)

    }

    return person 

}

/*

 工厂模式就是批量化生产,简单调用就可以进入造人模式(啪啪啪……)。

 指定姓名年龄就可以造一堆小宝宝啦,解放双手。

 但是由于是工厂暗箱操作的,所以你不能识别这个对象到底是什么类型、

 是人还是狗傻傻分不清(instanceof 测试为 Object),

 另外每次造人时都要创建一个独立的temp对象,代码臃肿,雅蠛蝶啊。

*/

3.构造函数

//3.构造函数模式,为对象定义一个构造函数

function Person (name, age) {

    this.name = name

    this.age = age

    this.sayName = function () {

        alert(this.name)

    }    

}

var p1 = new Person('Jack', 18) //创建一个p1对象

Person('Jack', 18)   

 //属性方法都给window对象,window.name='Jack',window.sayName()会输出Jack

 

 

 4.原型模式

 //4.原型模式,直接定义prototype属性

function Person () {}

Person.prototype.name = 'Jack'

Person.prototype.age = 18

Person.prototype.sayName = function () { alert(this.name) }

//4.原型模式,字面量定义方式

function Person () {}

Person.prototype = {

    name: 'Jack',

    age: 18,

    sayName: function () { alert(this.name) }

}

var p1 = new Person() //name='Jack'

var p2 = new Person() //name='Jack'

//这里需要注意的是原型属性和方法的共享,即所有实例中

//都只是引用原型中的属性方法,任何一个地方产生的改动会引起其他实例的变化。

5.混合模式(构造+原型)

//5. 原型构造组合模式,

function Person (name, age) {

    this.name = name

    this.age = age

}

Person.prototype = {

    hobby: ['running','football']

    sayName: function () { alert(this.name) },

    sayAge: function () { alert(this.age) }

}

var p1 = new Person('Jack', 20) 

//p1:'Jack',20 __proto__: ['running','football'],sayName,sayAge

var p2 = new Person('Mark', 18) 

//p1:'Mark',18__proto__: ['running','football'],sayName,sayAge

//通过上面的例子,有什么区别一目了然

所谓工厂函数,就是指这些内建函数都是类对象,当你调用他们时,实际上是创建了一个“类实例”。

我们首先通过new关键字创建了一个对象,obj就相当于Object的实例。我们通过类实例化了一个对象,然后给这个对象相应的属性,最后返回对象。我们可以通过调用这个函数来创建对象,这样的话,实际上工厂函数也很好理解了:

1,它是一个函数。

2,它用来创建对象。

3,它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性)

JavaScript项目有一个趋势,变得难以测试和重构,因为我们经常鼓励使用复杂的抽象层。原型和类实现一个简单的想法使用复杂和不人性的工具,如 new 和 this ,即使现在,这仍然引起各种各样的困惑,几年后他们被添加到语言。

1、德高(知名品牌)

2、东方雨虹(北京知名防水材料品牌)

3、固莱(知名防水涂料、瓷砖胶品牌)

4、科顺(广东著名品牌)

5、卓宝(知名防水涂料品牌)

6、汉高(国外知名品牌)

7、蒂贝贝尔(新兴防水涂料品牌)

8、朗凯奇(安徽防水涂料品牌)

9、龙马(广东防水品牌)

10、黑豹(广东品牌)

该排名仅供参考,谢谢采纳!