Javascript定义类(类)的三种方法

Javascript定义类(类)的三种方法
将近20年前,当Javascript诞生时,它只是一种简单的Web脚本语言。如果您忘记填写用户名,它就会跳出警告。
现在,它已经变得几乎无所不能,从前面到后面,有各种不可思议的用途,程序员用它来完成越来越多的项目。

Javascript代码的复杂性也在直线上升,单个网页包含10000行Javascript代码,这是很常见的一段时间。2010,一位工程师透露Gmail的代码长度为443000行。
为了编写和维护这样一个复杂的代码,必须采用模块化策略,目前业界主流的做法是采用面向对象编程,因此,Javascript如何实现面向对象的编程已成为热门话题。

麻烦的是,Javascript语法不支持阶级的程序员已经做了大量的探索研究如何使用Javascript来模拟上课。本文总结三用Javascript定义类的方法,讨论了各种方法的特点,并着重在我的眼睛最好的方法。

==============================================

Javascript定义类(类)的三种方法
在面向对象编程中,类(类)是对象(对象)的模板,定义同一组对象的公共属性和方法(也称为实例)。

Javascript语言不支持类

一、构造函数方法

这是一个经典的方法,也是教科书必须教的一种方法,它用构造函数模拟类,并用它中的关键字来引用一个实例对象。

复制代码代码如下所示:

函数猫(){

this.name =蛋;

}
当生成实例时,使用新关键字。

复制代码代码如下所示:

VaR CAT1 =新的猫();

警报(CAT1。名称); / /蛋
类的属性和方法也可以在构造函数的原型对象上定义。

复制代码代码如下所示:

cat.prototype.makesound =函数(){

警惕(喵);

}
对于这种方法的详细介绍,请看一下我的一系列文章Javascript面向对象编程,它的主要缺点是它更复杂,使用这个和原型,而且很难写和读。

二,object.create()方法

为了解决构造函数方法的缺点,它更容易生成对象。国际标准ECMAscript第五版的Javascript(目前在第三版中使用)已提出了一种新的方法object.create()。

这样,类是一个对象,而不是一个函数。

复制代码代码如下所示:

var

名称:蛋

makesound:(功能){ alert(喵喵);}

};
然后,一个实例是object.create直接生成(),和新的不需要。

复制代码代码如下所示:

VaR CAT1 = object.create(猫);

警报(CAT1。名称); / /蛋

(CAT1。makesound); / /喵喵
目前,最新版本的浏览器,包括IE9,已经部署了这种方法。如果你有一个旧的浏览器,你可以将它与下面的代码。

复制代码代码如下所示:

如果(!对象(创建){

object.create =功能(o){

函数(f){ }

f.prototype = O;

返回新的f();

};

}
此方法比构造函数方法简单,但不能实现私有属性和私有方法,也不能在实例之间共享数据。

三,最低限度的法律

荷兰程序员Gabor de Mooij提出了一个比object.create更好的新方法(),他称之为极简主义(简法)。这就是我的建议。

3.1封装

这个方法不使用这个和原型,而且代码部署起来非常简单,这可能就是为什么它被称为最低限度法则的原因

首先,它还对一个对象类,在这个类,构造函数创建新()的定义生成实例。

复制代码代码如下所示:

var

CreateNew:函数(){

这里的代码

}

};
然后,在新的(),一个实例对象的定义和实例对象作为返回值。

复制代码代码如下所示:

var

CreateNew: function () {

var;

cat.name =蛋;

(cat.makesound =功能){ alert(喵喵);};

返回的猫;

}

};
使用时,将创建新()方法,并实例对象可以得到。

复制代码代码如下所示:

VaR CAT1 = cat.createnew();

(CAT1。makesound); / /喵喵
该方法的优点是易于理解,结构清晰美观,符合传统面向对象编程结构,易于部署如下特点。

3.2继承

很方便的使一个类继承另一个类,只要在新的()的前法,后者的新方法可以称为()。

首先定义一个动物类。

复制代码代码如下所示:

var动物{ {

CreateNew:函数(){

var动物{ };

animal.sleep =函数(){ alert(睡眠懒惰);};

动物回归;

}

};
然后,在新的()方法的新猫,动物被称为()方法。

复制代码代码如下所示:

var

CreateNew:函数(){

VaR的猫= animal.createnew();

cat.name =蛋;

(cat.makesound =功能){ alert(喵喵);};

返回的猫;

}

};
这样的猫实例将继承猫类和动物类。

复制代码代码如下所示:

VaR CAT1 = cat.createnew();

(CAT1。睡眠); / /睡眠
3.3私有财产和私有方法

在创建新()方法,只要方法和属性不在猫的对象定义的,他们是私人的。

复制代码代码如下所示:

var

CreateNew:函数(){

var;

var喵;

cat.makesound =函数(){ alert(音)};};

返回的猫;

}

};
内部变量的声音,外面看不懂,只有通过公共makesound猫()读取方法。

复制代码代码如下所示:

VaR CAT1 = cat.createnew();

警报(CAT1。声音); / /未定义
3.4数据共享

有时候,我们需要的所有实例对象的读写相同的内部数据。在这个时候,就把这个内部数据的外部类对象的内部,()的新方法。

复制代码代码如下所示:

var

声音:喵喵

CreateNew:函数(){

var;

cat.makesound =函数(){ alert(猫音)};};

cat.changesound =函数(x){ cat.sound = x;};

返回的猫;

}

};
然后,生成两个实例对象:

复制代码代码如下所示:

VaR CAT1 = cat.createnew();

Var cat2 = Cat.createNew ();

(CAT1。makesound); / /喵喵
此时,如果有一个实例对象,共享数据被修改,另一个实例对象将受到影响

复制代码代码如下所示:

cat2.changesound(啦啦啦);

(CAT1。makesound); / /啦啦啦
(完成)
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部