JavaScript创建对象的7种方式

博客介绍了JavaScript创建对象的7种方式,包括工厂模式、构造函数模式、原型模式等。分析了各方式的特点与问题,如工厂模式无法用constructor识别对象且浪费资源,构造函数+原型模式是目前最广泛认可的方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript创建对象的7种方式

  • 工厂模式

    function Person(){
         var obj = new Object();
         obj.name = 'aaa';
         obj.say = function(){
             console.log(this.name);
         }
         return obj;
     }
    var person1 = Person();
    person1.say();
    console.log(person1.name);
    

    不使用new操作符,函数内部返回一个新创建的对象,存在无法通过constructor识别对象和创建多个实例时,会多次存储共同的方法,浪费资源的问题。

  • 构造函数模式

    function Person(){
       this.name = 'aaa';
       this.say = function(){
           console.log(this.name);
         }
       }
    var person1 = new Person();
    person1.say();
    console.log(person1.name);
    

    通过new关键字创建实例,解决了constructor识别问题,但多个实例多次存储共同的方法的问题仍未解决。

  • 原型模式

    function Person(){}
        Person.prototype.name = 'aaa';
        Person.prototype.say = function(){
        console.log(this.name);
    }
    var person1 = new Person();
    person1.say();
    console.log(person1.name);
    

    多个实例对象共享属性和方法,解决了上述问题,但可能会存在应用类型属性互相影响的情况。

  • 构造函数+原型模式

    function Person(name){
       this.name = name;
    }
    Person.prototype.say = function(){
       console.log(this.name);
    }
    var person1 = new Person('a');
    var person2 = new Person('b');
    person1.say();
    person2.say();
    

    目前最为广泛、认可度最高的方法,原型链的方式定义共享方法,实例拥有自己的属性,不会互相影响。

  • 动态原型模式

    function Person(name){
        this.name = name;
        if(typeof this.say!= 'function'){
            Person.prototype.say = function(){
                console.log(this.name);
            }
        }
    }
    var person1 = new Person('aa');
    person1.say();
    

    可以在初次调用构造函数的时候就完成原型对象的修改,且修改能体现在所有实例中

  • 寄生构造模式

    function Person(name){
       var obj = new Object();
          obj.name = name;
          obj.say = function(){
             console.log(this.name);
          }
       return obj;
    }
    var person1 = new Person('aa');
    person1.say();
    

    和工厂模式形式上的区别是使用了new操作符

  • 稳妥构造模式

    function Person(name){
        var obj = new Object();
        obj.name = name;
        obj.say = function () {
             console.log(name);
        }
        return obj;
    }
    var person1 = Person('aaa');
    person1.say();
    

    适用于禁用this和new的环境下,但是存在无法通过constructor识别对象和创建多个实例时,会多次存储共同的方法,浪费资源的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值