首页 >> 方法大全

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

2022-05-14 方法大全 546 作者:考证青年

在面向对象的编程中,类(class)是对象()的模板,定义了同一组对象(也称为“实例”)共有的属性和方法。

该语言不支持“类”,但可以使用一些变通方法来模拟“类”。

一、构造方法

这是一种经典的方法,也是教科书中必传的方法。它模拟了一个带有构造函数的“类”,在里面用this关键字引用实例对象。

猫(){

this.name = "大毛";

}

生成实例时,使用new关键字。

var cat1 = new Cat();

警报(猫1.名字); // 大毛

类的属性和方法,也可以定义在构造函数的对象之上。

猫.. = (){

alert("喵喵喵");

}

关于这个方法的详细介绍请看我写的系列文章,这里就不多说了。它的主要缺点是比较复杂,用这个and,写和读都很费劲。

二、.() 方法

为了解决“构造方法”的不足,更方便地生成对象,国际标准第五版(目前流行的是第三版),提出了一种新的方法。

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

变种猫 = {

姓名:“大毛”,

: (){ alert("喵喵喵"); }

};

然后,直接使用.()生成实例,不使用new。

var cat1 = .(Cat);

警报(猫1.名字); // 大头发

猫1.( ); //喵喵喵

目前各大浏览器的最新版本(包括IE9))都部署了这种方法。如果遇到老浏览器,可以自己使用下面的代码部署。

如果 (!.) {

。 = (o) {

F() {}

F。 = o;

新的 F();

};

}

这种方法比“构造方法”简单,但不能实现私有属性和私有方法,实例对象之间不能共享数据,对“类”的模拟不够全面。

三、极简主义

荷兰程序员 Gabor de Mooij 提出了一种比 .() 更好的新方法,他称之为“极简主义方法”( )。这也是我推荐的方法。

方法

3.1 封装

这个方法没有用到这个,而且代码部署起来很简单,这大概就是它被称为“极简方法”的原因吧。

首先方法,它还使用一个对象来模拟一个“类”。在这个类中,定义一个构造函数()来生成一个实例。

变种猫 = {

: (){

//这里有一些代码

}

};

然后,在()中,定义一个实例对象,把这个实例对象作为返回值。

变种猫 = {

: (){

var cat = {};

cat.name = "大猫";

猫。 = (){ alert("喵喵"); };

猫;

}

};

使用时调用()方法获取实例对象。

var cat1 = Cat.();

猫1.(); //喵喵喵

这种方法的优点是易于理解,结构清晰优雅,符合传统的“面向对象编程”结构,因此可以轻松部署以下特性。

3.2 继承

让一个类继承另一个类,实现起来非常方便。只需在前者的()方法中调用后者的()方法即可。 () 方法。

首先定义一个类。

var = {

: (){

var = {};

.sleep = (){ alert("睡晚了"); };

;

}

};

然后,在 Cat 的 () 方法中,调用 () 方法。

变种猫 = {

: (){

var cat = .();

cat.name = "大毛" ;

猫。 = (){ alert("喵喵喵"); };

猫;

方法

}

};

这样得到的Cat实例会继承Cat类和类。

var cat1 = Cat.();

猫1.睡眠(); // 晚睡

3.3 私有属性和私有方法

在()方法中方法,只要没有在cat对象上定义方法和属性,都是私有的。

变种猫 = {

: (){

var cat = {};

var sound = "喵喵喵" ;

猫。 = (){ 警报(声音); };

猫;

}

};

上面例子的内部变量sound不能被外部读取,只能通过cat的公共方法()。

var cat1 = Cat.();

警报(猫1.声音); //

3.4 数据共享

有时,我们需要所有实例对象都能够读取和写入相同的内部数据。这时候,只需将这个内部数据封装在类对象内部和()方法之外。

变种猫 = {

声音:“喵喵喵”,

: (){

var cat = {};

猫。 = (){ 警报(Cat.sound); };

猫。 = (x){ Cat.sound = x; };

猫;

}

};

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

var cat1 = Cat.();

var cat2 = Cat.();

猫1.(); //喵喵喵

此时如果有实例对象,修改共享数据,也会影响另一个实例对象。

猫2.("啦啦啦");

猫1.(); //啦啦啦

(结束)

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了