JavaScript中对象的几种创建方式
面向对象的创建方式一共有几种?有很多人说是有两种,也有很多人说是有三种,《JavaScirpt高级程序设计》中对象的创建方式又为大家展开讲列举了几种对象的创建方式,下面我就做一个总结,把面向对象的几种创建方式完整的展现在大家面前。
创建对象一共有:
1.通过new Object()构造函数的方法初始化一个新对象
例如:1
2
3
4
5
6var obj = new Object()
obj.name = "Bob";
obj.age = 18;
obj.act = function (){
alert("I like football");
};
JS面向对象构造函数的方法即引用内置对象,实例化出一个新对象。
JavaScript可用的内置对象可分为两种:
1,JavaScript语言原生对象(语言级对象),如String、Object、Function等;
2,JavaScript运行期的宿主对象(环境宿主对象),如window、document、body等。
2.字面量创建方式,即使用json符号创建
例如:1
2
3
4var obj1 = {
x:1,
y:2
};
或者:1
2
3
4var obj2 = {
'x':1,
'y':2
};
除此之外,字面量创建方式可以用来传输数组形式的json
例如:1
2
3
4var somebody = {
x:[{name:"Bob"},{name:"Danny"},{name:"Janny"},{name:"LiMing"}],
y:[{age:18},{age:19},{age:20},{age:21}]
}
这种方式是采用键、值一一对应的方式,JSON具有以下特点:(1)简单格式化的数据交换;(2)易于人们的读写习惯;(3)易于机器的分析和运行。而JSON的每个“键”相当于对象的属性,利用json传输数组如访问x中的第一个条目,在JavaScript中,就可以简单地使用“somebody.x[0].name”来获取“Bob”这个值。
3.使用Object.create()的方式创建新对象
例如:1
2
3
4
5var obj1 = Object.create({
x:1,
y:2
});
var obj2 = Object.create(null);
Object.create()的方法是ECMAScrit5中新定义的一个方法,所以并不被大众所熟知,可能这是大家认为创建对象有两种方式的原因,它包含2个参数,第一个参数是这个对象的原型对象,第二个参数是可选参数,用以对对象属性进行进一步的描述。var obj = Object.create(Object.prototype);
等同于var obj = {};
也等同于var obj = new Object();
好了,现在创建对象的三种方式都介绍完了,但是问题又来了,当我创建几个相似对象的时候,每个对象我不能从新定义它的属性值,那样的话就覆盖了原有的属性值,使得原来的对象不能正确的访问到,而我重新创建又会产生大量的重复代码,那我改如何改进呢?好在我们的程序员们都很聪明,用封装函数的方法来在外部调用,就解决了这一问题,而这也是《JavaScript高级程序设计》面向对象一章中给我们介绍的五种方法
(1)工厂模式
1 | function Person(){ |
(2)构造函数模式
1 | function Person(){ |
(3)原型模式
1 | function Person(){ |
(4)组合使用构造函数模式和原型模式
1 | function Person(){ |
(5)动态原型模式
1 | function Person(){ |
以上的五种方法,都是经典的创建对象的方法,这里推荐使用第四种和第五种,因为它们都是演变而来的,第一种工厂模式没有解决对象识别的问题,第二种构造函数模式中建立了全局作用域的函数,如果很多的话就没有丝毫的封装性可言,第三种原型方式如果创建多个对象实例,修改某一对象原型使得其他对象原型跟跟随着改变,而缺少了属于自己的全部属性,这也是我们不希望看到的,而第四种和第五种完全兼顾了这些问题,第五种还是第四种的变形体,防止重复创建方法,所以如果没有特殊要求的话可以随便使用上述五种方法,如果有的话推荐第四种和第五种。