首页 > 代码库 > js面向对象类

js面向对象类

类:其实可以有4种主流模式实现,但是每种都有优缺点,最后组合模式胜出。

1.工厂模式:由来就是使用这种模式我们可以复用大量的代码,类嘛,本来就是为了实现对世间万物复用的模板是吧。实现其实就是简单的在一个方法里面声明一个对象,添加对象的属性和方法,然后返回对象。优点:实现代码复用;缺点:无法判别对象属于哪个类。

2.构造函数模式:首先默认方法名称首字母大写,声明要使用new; 例如:var user = new Person();构造函数最关键的就是里面的属性和方法我们要使用this关键字,比如

this.name = name;这样在调用构造方法 的时候我们什么对象调用就会为每个对象分配各自的属性个方法。缺点就是当类里面有方法时我们写到this.sayName = function(){alert(name)}这时候就不好了,因为每个对象都会有一个方法,会重写n个方法,他们是function(){alert(name)},多么的浪费内存啊。猜想方法的类型是Function,属于引用型,存放的位置应该跟简单的属性名称不一样,所以浪费内存。优点:实现代码复用,并且我们可以通过instanceof判断属于哪个类;缺点:写方法时要为每个实例创建一个function浪费内存。

3.原型模式:原型就是每个实例可以共享的一片空间,我们可以在这里放置属性和方法,由此可见代码复用解决了,构造函数模式浪费内存的问题解决了。优点:实现代码复用,可以判断类别标识,共享一片空间不浪费内存。缺点:由于共享,所以在设置引用属性时会出现问题,比如Person.prototype.address=["河南",“河北”];声明两个对象person1和person2;person1.address.push("北京");alert(person1.address)→河南,河北,北京;alert(person.address)→河南,河北,北京。这是一个很大的问题。

4.组合模式:结合了构造函数和原型模式的优点,属性使用构造,方法使用原型设置。

5.动态原型,实际上就是把组合模式中在外面用原型声明的方法放在了函数体内部,并且只加载一次。

js面向对象类