js建立对象的几种方式

一、经过new object方法或者字面量的方式创造对象函数

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

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

二、工厂模式spa

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为工厂模式建立出来的对象)prototype

三、构造函数模式(没法复用属性)与原型模式 (属性共享)code

四、组合构造函数+原型模式对象

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

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

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
     }
}

六、Object.create(_pro_)原型

七、寄生构造函数(和工厂模式同样,只是调用方式上存在差别,就是在其余构造函数上的一个扩展,我的以为没啥用)io

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

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

function Student(name){
    let obj = new Object()
    let name = name //这里不能写为obj.name = name
    obj.sayName = function(){
        return name
    }
    return obj
}
let stu1 = Student('zale')
相关文章
相关标签/搜索