1、通过new object方法或者字面量的方式创造对象

var obj = new Object()
var obj1 = {}

缺点:创造多个key同,value不同的对象的时候会产生大量的重复代码(重复的书写key=value)

2、工厂模式

function  CreateObj(...arg){
    let obj = new Object()
    let attrs = ['a','b','c']
    attrs.forEach((attr,index)=> {
        obj[attr] = arg[index] || null
    });
    return obj
    }

缺点:无法解决对象的识别问题(x.constructor === Object,x为工厂模式创建出来的对象)

3、构造函数模式(无法复用属性)与原型模式 (属性共享)

4、组合构造函数+原型模式

function People(name){
     this.name = name
}
People.prototype.say = function(){
    return 'hello'
}

5、动态原型模式(更好的封装,把所有属性都放在一个方法内部)

function People(name,fn){
    if(fn&& typeof fn !== 'function')throw 'fn must be a function'
     this.name = name
     if(!fn){
         People.prototype.say = function(){
             return 'hello'
         }
     }else{
         this.say = fn
     }
}

6、Object.create(_pro_)

7、寄生构造函数(和工厂模式一样,只是调用方式上存在差异,就是在其他构造函数上的一个扩展,个人觉得没啥用)

function MyArray(){
    let ary = new Array()
    ary.test = function(){
        alert(ary[0]||'没有值')
    }
    return ary
}
let myarry = new MyArray()
myarry.test()

8、稳妥构造函数(内部不能使用this,私有属性不能定义在对象上,只能定义在方法内部,调用时不能用new)

function Student(name){
    let obj = new Object()
    let name = name //这里不能写为obj.name = name
    obj.sayName = function(){
        return name
    }
    return obj
}
let stu1 = Student('zale')

 

posted on 2018-09-01 13:41  爬虫一只  阅读(171)  评论(0编辑  收藏  举报