JavaScript中创建对象的方法

本文深入解析JavaScript中五种创建对象的方法:使用new关键字调用构造器、使用Object直接创建、使用JSON语法、原型模式及组合构造函数与原型模式。探讨每种方法的特点与适用场景,帮助读者理解JS对象的灵活创建方式。

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

一:使用new关键字调用构造器创建对象;

在JavaScript中,所有的函数名可以看成一个类名;

函数名和其参数可以看成一个构造器用于构造对象;

使用构造函数模式创建对象的几点注意事项:

(1):没有明显的创建对象

(2):直接将属性和方法赋给this对象

(3):没有return语句

(4):创建Student实例的时候,必须要使用new操作符;

function Student(name,age){

this.name=name;//this是当前对象的引用;

this.age=age;

}

var s1=new Student();//没有传入参数,函数里面的name,age是undefine

var s2=new Student("wangshicheng",20);


document.write(s1.name+s1.age);//都是undefine;

document.write(s2.name+s2.age);//都是传入实参的值;

 

二:使用Object直接创建对象

var myObj=new Object();//使用Object类创建一个空的对象

myObj.name="wangshihcheng";

myObj.age=20;

myObj.infor=function(){

document.write("名字:"+this.name);//this.的指向问题

document.write("年龄:"+this.age);

}

myObj.infor();//调用创建的对象里面的方法;

三:使用JSON创建对象的语法

//object={属性名1:属性值1,属性名2:属性值2,.....}

//注意JOSN格式中属性名要加双引号;

var p={

"name":"wangsch",

"gender":"man",

"age":40,

"son":[

    {

        "name":"son1",

        "age":2

    },

    {

    "name":"son2",

    "age":5

    }

],

"infor":function(){

document.write("父亲的姓名:"+this.name+",父亲的年龄:"+this.age+"<br>");

for( var child in this.son ){

document.write("儿子的姓名:"+this.son[child].name+",儿子的年龄:"+this.son[child].age+"<br>");

                }

        }

}

p.infor();//调用对象p中的infor方法

四:原型模式创建对象

在JavaScript中,每个函数都有一个prototype属性,它是一个指针,指向一个对象,叫做

原型对象,原型对象包含了可以由特定类型的所有实例对象共享的属性和方法;

另外,这个对象有一个自带的属性constructor,指向创建对象的构造方法;

当我们使用原型模式时可以使所有的实例共享原型对象的属性和方法,

从而我们不必要早构造函数中定义对象的实例的信息;

function Student(){
        

}
Student.prototype.name="wang";
Student.prototype.sex="man";
Student.prototype.class="5";
Student.prototype.sayName=function(){
    console.log(this.name);
}

var s1=new Student();
s1.sayName();//wang

var s2=new Student();
s2.sayName();//wang

s2.name="shicheng";
s2.sayName();//shicheng

当我们读取某个对象的属性时,都会执行一次搜索,搜索首先从对象实例本身开始,

如果在实例中找到了这个属性,则搜索结束,返回属性的值;

若实例上没有找到,则继续向对象的原型对象上面延申,搜索对象的原型对象,若在原型上面

找到这个属性,则返回原型上面属性对应的值,若没有找到,则返回undefine;

因此,可以看出,实例对象属性会覆盖原型对象上面的属性;

五:组合使用构造函数和原型模式

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

function Student(name,sex,grade){
    this.name=name;
    this.sex=sex;
    this.grade=grade;
}

Student.prototype.sayName=function(){
    console.log(this.name);
}

Student.prototype.school="nongda";

这种混合模式可以支持想构造函数传入参数,还极大的节约了内存;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值