JS中创建对象的几种方式

本文详细介绍了JavaScript中创建对象的多种模式,包括工厂模式、构造函数模式、原型模式、组合构造函数模式和原型模式、动态原型模式、寄生构造函数模式及稳妥构造函数模式。每种模式的特点和使用场景都进行了深入探讨。

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

每一个对象都是引用类型创建的。

一、工厂模式

function createPerson(){
    var o=new Object();
    o.name=name;
    o.sex=sex;
    o.sayName=function(){
        alert(this.name);
    }
    return o;
}
            
var person1=new createPerson('zhangsan','男');
var person2=new createPerson('wangwu','女');

特点:1、用函数来封装,并以特定接口创建对象;2、有返回值

缺点:虽然解决了创建多个对象的问题,但没有解决对象识别的问题(怎样知道一个对象的类型)

二、构造函数模式(通过this实现)

用构造函数可以创建特定类型的对象,同时也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。

function Person(name,age){
    this.name=name;
    this.age=age;
    this.sayName=function(){
        alert(this.name);
    }
};
            
var person1=new Person('zhangsan',20);
var person2=new Person('wangwu',15);

与工厂模式的区别在于:

1、没有显式地创建对象;

2、直接将属性和方法赋给了this对象

3、没有return语句

三、原型模式(通过原型对象实现)

创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象包含了所有实例共享的属性和方法。

因此可以将属性和方法放在原型对象里面,让所有实例都可以共享。

function Person(){};
            
    Person.prototype.name='zhangsan';
    Person.prototype.age=20;
    Person.prototype.sayName=function(){
    alert(this.name);
    }
}
            
var person1=new Person();
person1.sayName();   //zhangsan
            
var person2=new Person();
person2.sayName();   //zhangsan

先新建一个空的构造函数,然后将属性和方法添加到原型对象里面,再创建实例对象,实例对象就拥有了原型对象里的属性和方法。不管创建多少个实例对象,原型对象里的属性和方法都是共享的。

四、组合构造函数模式和原型模式

构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性

function Person(name,age){      //构造函数模式
    this.name=name;
    this.age=age;
    this.friends=['shelly','lucy'];
};
            
Person.prototype.sayName=function(){      //原型模式
    alert(this.name);
}
            
var person1=new Person('zhangsan',20);      //构造函数模式
var person2=new Person('wangwu',15);
            
person1.friends.push('van');
alert(person1.friends);   //shel            ly,lucy,van
alert(person2.friends);   //shelly,lucy

五、动态原型模式

就是将所有代码装在一起

六、寄生构造函数模式

function Person(){
    var o=new Object();
    o.name=name;
    o.sex=sex;
    o.sayName=function(){
        alert(this.name);
    }
    return o;
}
            
var person1=new Person('zhangsan','男');
var person2=new Person('wangwu','女');

跟工厂模式很像,但是是构造函数创建得

七、稳妥构造函数模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值