web第八天

本文详细介绍了JavaScript中创建对象的六种常见方式:工厂模式、构造函数模式、原型模式、组合使用构造器和原型模式、动态原型模式以及稳妥构造函数模式。每种模式都有其独特的优势和不足,如工厂模式适用于创建多个对象,但无法识别对象类型;构造函数解决了识别问题,但可能导致不必要的函数实例;原型模式节省内存,但共享属性可能导致意外修改等。通过这些模式的组合使用,开发者可以根据需求平衡性能和功能。
摘要由CSDN通过智能技术生成

定义对象有哪些方式
    1.工厂模式
    function Person(name){
        var o=new Object()
        o.name=name
        o.say=function(){ console.log(o.name) }
        return o
    }
    优点:能够解决创建多个对象的问题,兼容各个浏览器
    缺点:没有解决对象识别的问题,不知道一个对象的具体类型
    2.构造函数模式
    function Person1(name){
        this.name=name
        this.say=function(){ console.log(o.name) }
    }
    优点:可以创建多个对象,解决对象识别问题
    缺点:每个对象都会创建不同的function实例,如果完成同样的任务,就没有必要
    3.原型模式
    function Person(){}
    Person.prototype.name="xiaoming"
    Person.prototype.say=function(){
        console.log(o.name)
    }
    优点:不用构造器传参,可以同时创建多个对象
    缺点:原型的数据被共享,当属性被改变时,所有实例都改变
    4.组合使用构造器和原型模式
    function Person(){
        this.name=name
    }
    Person.prototype={
        constuctor:Person
        say:function(){ console.log(this.name) }
    }
    var p=new Person("li")
    console.log(p)
    优点:每个实例都有自己的属性副本,同时又共享了方法,既可以节省内存,又可以赋值
    5.动态原型模式
    function Person(name){
        this.name=name
        if(typeof this.say !="function"){
            Person.prototype.say=function(){ console.log(this.name) }
        }
    }
    var p=new Person("zhang")
    console.log(p)
    优点:满足组合模式所有优点,并且代码比较规整,统一初始化
    6.寄生构造函数模式
    function tostrarr(){
        var arr=new Array()
        arr.push.apply(arr,arguments)
        arr.topstr=function(){ return this.join("|") }
        return arr
    }
    var x=new tostrarr("a","b","c")
    console.log(x.topstr())
    console.log(x)
    优点:类似于工厂模式,用来给原生对象定义新的属性和方法,而无需自己创建新对象,节省内存
    7.稳妥构造函数模式(最好)
    function Person(name){
        var o=name Object
        o.name=name
        _age=23
        if(typeof o.say != "function"){
            o.say=function(){ console.log(this.name) }
        }
        return o
    }
    var p=new Person("lisi")
    console.log(p)
    console.log(p.name)
    p.say()
    console.log(p)
    优点:可以定义私有变量,可以共享函数,可以节省内存,可以构造器赋值,代码更安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值