首页 > 语言 > JavaScript > 正文

JavaScript ES6中CLASS的使用详解

2024-05-06 15:06:35
字体:
来源:转载
供稿:网友

前言

对于javascript来说,类是一种可选(而不是必须)的设计模式,而且在JavaScript这样的[[Prototype]] 语言中实现类是很蹩脚的。

这种蹩脚的感觉不只是来源于语法,虽然语法是很重要的原因。js里面有许多语法的缺点:繁琐杂乱的.prototype 引用、试图调用原型链上层同名函数时的显式伪多态以及不可靠、不美观而且容易被误解成“构造函数”的.constructor。

除此之外,类设计其实还存在更进一步的问题。传统面向类的语言中父类和子类、子类和实例之间其实是复制操作,但是在[[Prototype]] 中并没有复制。

对象关联代码和行为委托使用了[[Prototype]] 而不是将它藏起来,对比其简洁性可以看出,类并不适用于JavaScript。

ES6中CLASS的使用

javascript传统做法是当生成一个对象实例,需要定义构造函数,然后通过new的方式完成。

function StdInfo(){  this.name = "job";        this.age = 30;      }StdInfo.prototype.getNames = function (){  console.log("name:"+this.name);        }//得到一个学员信息对象var p = new StdInfo()

javacript中只有对象,没有类。它是是基于原型的语言,原型对象是新对象的模板,它将自身的属性共享给新对象。这样的写法和传统面向对象语言差异很大,很容易让新手感到困惑。

定义类

到了ES6添加了类,作为对象的模板。通过class来定义一个类:

//定义类class StdInfo {  constructor(){    this.name = "job";          this.age = 30;     }  //定义在类中的方法不需要添加function  getNames(){    console.log("name:"+this.name);     }}//使用new的方式得到一个实例对象var p = new StdInfo();

上面的写法更加清晰、更像面向对象编程的语法,看起来也更容易理解。

定义的类只是语法糖,目的是让我们用更简洁明了的语法创建对象及处理相关的继承。

//定义类class StdInfo {  //...}console.log(typeof StdInfo); //functionconsole.log(StdInfo === StdInfo.prototype.constructor); //true

从上面的测试中可以看出来,类的类型就是一个函数,是一个“特殊函数”,指向的是构造函数。

函数的定义方式有函数声明和函数表达式两种,类的定义方式也有两种,分别是:类声明和类表达式。

类声明

类声明是定义类的一种方式,使用关键字class,后面跟上类名,然后就是一对大括号。把这一类需要定义的方法放在大括号中。

//定义类,可以省略constructorclass StdInfo {  getNames(){    console.log("name:"+this.name);  }}// -------------------------------------//定义类,加上constructorclass StdInfo {  //使用new定义实例对象时,自动调用这个函数,传入参数  constructor(name,age){    this.name = name;          this.age = age;     }    getNames(){    console.log("name:"+this.name);     }}//定义实例对象时,传入参数var p = new StdInfo("job",30)            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选