JavaScript中对象的定义方式(转)

https://blog.csdn.net/qq_41690306/article/details/79253501



JavaScript中对象的定义方式

2018年02月04日 16:54:19 慕云白 阅读数:940

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41690306/article/details/79253501

在JavaScript中是没有类的概念的,只有对象。无论是字符串,数值,数组还是函数,其本质都是对象。此外,JavaScript是允许自定义对象。什么是对象呢?简而言之,对象是带有属性方法的特殊数据类型。以下是几种常用的对象定义方式。

1、基于已有对象扩充其属性和方法

简单的创建一个对象,然后动态地为其增加属性和方法。

varobject=newObject();

object.name="zhangsan";

object.sayName=function()

{

this.name=name;

}

object.sayName("lisi");

2、工厂方法

工厂方式的优点在于你不需要每次扩充方法和属性,一次建成后就可以产生多个对象,无需关注创建细节,甚至不需要关注具体类的类名。

functionfactory()

{

varobject =newObject();

object.username ="zhangsan";

object.password ="123";

object.get =function()

    {

return(this.username+","+this.password);

    }

returnobject;

}

varobject1 = factory();

object1.get();

varobject2 = factory();

好的对象创建方式应该满足方法可以被多个对象共享,而属性私有,使代码更加简略。同时,也可以将上述的程序改写为带参数的工厂创建方式。改进后的代码如下:

functionget(){

return(this.username+","+this.password);

}

functionfactory(username,password){

varobject =newObject();

    object.username = username;

    object.password = password;

    object.get = get;

returnobject;

}

varobject1 = factory("zhangsan","123");

object1.get();

varobject2 = factory("lisi","456");

3、构造函数方式

使用构造函数方式时,JavaScript引擎会在第一行代码执行前为我们生成一个对象,同时含有一个隐藏的return语句,将生成的对象返回。因此,在函数体内,无需显性地声明。

functionPerson(){

//在执行第一行代码前,js自动生成一个对象

this.username ="zhangsan";

this.password ="123";

this.get =function(){

return(this.username+","+this.password);

    }

//隐藏的return语句,将生成的对象返回

}

varperson =newPerson();

person.get();

同理,也可以将其改为可传递参数的构造函数。

4、使用原型(prototype)方式

单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。

functionPerson()

{

}

Person.prototype.username ="zhangsan";

Person.prototype.password ="123";

person.prototype.get =function(){

return(this.username+","+this.password);

}

varperson =newPerson();

person.username ="lisi";

person.password ="456";

person.get();

如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反映到其他对象当中。可以使用原型+构造函数方式来解决这个问题,使对象之间的属性互不干扰,各个对象间共享同一个方法。这也是推荐使用的方法。

functionPerson()

{

this.username =newArray();

this.password ="";

}

Person.prototype.get =function()

{

return(this.username+","+this.password);

}

varp1 =newPerson();

varp2 =newPerson();

p1.username.push("zhangsan");

p1.password ="123";

p2.username.push("lisi");

p2.password ="456";

p1.get();

p2.get();

5、动态原型方式

在构造函数中,通过标志量让所有对象共享一个方法,而每个对象都拥有自己的属性。

functionPerson()

{

this.username ="zhangsan";

this.password ="123";

if(typeofPerson.flag =="undefined")

    {

Person.prototype.get =function()

        {

return(this.username+","+this.password);

        }

Person.flag =true;

    }

}

varp1 =newPerson();

varp2 =newPerson();

p1.get();

p2.get();

结言

以上为个人学习过程中的总结,若有更好的方法或者其他的理解,欢迎留言或者私信探讨。

恨不在深圳,西乡初高中学历在职免试入学考本科,一年考完

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容