面向对象高级
对象创建模式
-
Object构造函数模式
- 先创建空object对象,再动态添加属性/方法
- 适用场景:起始时不确定对象内部数据
- 问题:语句太多
var p = new Object()//var obj = {}; p.name = "a" p.age = 12 p.setName = function (name) { this.name = name } -
对象字面量模式
- 使用{ }创建对象,同时指定属性/方法
- 适用场景:起始时对象内部数据确定
- 问题:若创建多个对象,有重复代码
var p = { name:"a", age:12 } -
工厂模式
- 通过工厂函数动态创建对象并返回
- 适用场景:需要创建多个对象
- 问题:对象没有一个具体的类型,都是Object类型,均是Object构造函数的实例对象
function creatP(name,age){ //返回一个对象函数===>工厂函数 var obj = { name:name, age:age } return obj } var p1 = creatP("a",10) var p2 = ceartP("b",12) console.log(p1 instanceof Object)//true console.log(p2 instanceof Object)//true -
自定义构造函数模式
-
自定义构造函数,通过new创建对象
-
适用场景:需要创建多个类型确定的对象,不同构造函数的实例对象
-
问题:每个实例对象都有相同的方法数据,浪费内存,方法加原型!
//定义类型 function Person(name,age) { this.name = name this.age = age this.setName = function (name) {//一般放在原型空间 Person.prototype.setName this.name = name } } var p1 = new Person("Tom",12) p1.setName("Jack") console.log(p1.name,p1.age) function Student(name,price) { this.name = name this.price = price } var p2 = new Student("Jack",1000) console.log(p1 instanceof Preson)//true console.log(p2 instanceof Student)//true
-
-
自定义构造函数模+原型模式
- 自定义构造函数,属性在函数中初始化,方法加到原型中
- 适用场景:需要创建多个类型确定的对象