总结创建对象的六种方式
new Object()、字面式
使用同一接口创建多个对象时,会产生大量重复代码
1 | var person = new Object(); |
工厂模式
写一个方法,return new Object() 创建的对象
解决了重复实例化多个对象的问题
没有解决对象识别的问题,不知道对象是谁的实例
因为全部都是Object,不像Date、Array等,本例中,得到的都是o对象,对象的类型都是Object
1 | function createPerson(name,age,family) { |
构造函数模式
- 可以知道创建的对象是哪个的实例
- 每个方法都会在每个实例上重新创建一遍,可能造成滥用闭包,内存泄漏的问题(如果方法引入了外部的变量)
1 | function Person(name,age,family) { |
原型模式
- 所有对象实例共享它的属性和方法
- 可以设置实例自己的属性(方法)(即所谓的私有属性),可以覆盖原型对象上的同名属性(方法)
1 | function Person() { |
混合模式(构造函数模式+原型模式)
构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性
混合模式共享着对相同方法的引用,又保证了每个实例有自己的私有属性。最大限度的节省了内存
1 | function Person(name,age,family){ |