在在javascript中创建对象的各种模式解析中创建对象的各种模式解析
最近在看《javascript高级程序设计》(第二版)
javascript中对象的创建中对象的创建
•工厂模式工厂模式
•构造函数模式构造函数模式
•原型模式原型模式
•结合构造函数和原型模式结合构造函数和原型模式
•原型动态模式原型动态模式
面向对象的语言大都有一个类的概念,通过类可以创建多个具有相同方法和属性的对象。虽然从技术上讲,javascript是一门
面向对象的语言,但是javascript没有类的概念,一切都是对象。任意一个对象都是某种引用类型的实例,都是通过已有的引
用类型创建;引用类型可以是原生的,也可以是自定义的。原生的引用类型有:Object、Array、Data、RegExp、Function。
!引用类型就是一种数据结构,将数据和功能组织在一起,通常被称为类。 缺乏类概念的javascript中,需要解决的问题就是
如何高效的创建对象。
1.1.0.创建对象的一般方法创建对象的一般方法
var person = {}; //对象字面量表示,等同于var person = new Objcect();
person.name = 'evansdiy';
person.age = '22';
person.friends = ['ajiao','tiantian','pangzi'];
person.logName = function() {
console.log(this.name);
}
基于Object引用类型,创建了一个对象,该对象包含四个属性,其中一个为方法。如果需要很多类似person的实例,那就会有
许多重复的代码。
1.1.1.工厂模式工厂模式
通过一个可以包含了对象细节的函数来创建对象,然后返回这个对象。
function person(name,age,friends) {
var o = {
name: name,
age: age,
friends: friends,
logName: function() {
console.log(this.name);
}
};
return o;
}
var person1 = person('Evansdiy','22',['ajiao','tiantian','pangzi']);
每次调用person函数,都会通过该函数内部的对象o创建新的对象,然后返回,除此之外,这个为了创建新对象而存在的内部
对象o没有其他的用途。另外,无法判断工厂模式创建的对象的类型。
1.1.2.构造函数模式构造函数模式
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.logName = function() {
console.log(this.name);
}