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、黑豹(广东品牌)
该排名仅供参考,谢谢采纳!