一、定义构造函数

在以前的js中,生成一个对象实例,需要先定义构造函数,然后通过prototype 的方式来添加方法,在生成实例:

function Person(){
this.name = "测试";
this.age = 26;
} Person.prototype.getName = function(){
console.log("name:" + this.name) } var p = new Person()

然而系现在的ES6

class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
getName() {
return this.name;
}
} var p = new Person("luoqiang",26)

在ES5中原本的构造函数被constructor 替代,本来需要定义在prototype上面的,方法直接定义在class里面即可。

ES6中的类的数据类型就是函数,类本身指向构造函数,使用的时候也需要new命令。

类中所有的方法都定义在类的prototype属性上面。

class B {}
let b = new B(); b.constructor === B.prototype.constructor // true

二、Class 的静态方法

ES6 中类有静态方法,即一个方法前加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用。

class Food {
static classMethod() {
return 'hello'
}
} Food.classMethod() // "hello" var poo = new Food();
poo.classMethod() // TypeError: poo.classMethod is not a function

通过类直接调用,输出的是hello,实例化以后不能调用。

PS:

在react、 RN中,this.state ={} 这种写法是在constructor 里面定义实例属性。

class ReactCounter extends React.Component {
state;
constructor(props){
super(props);
this.state = {
count:0
}
}
}

super(props)是继承父类的props 属性,state是在子类中定义实例属性。

三、class 继承

以前的继承方式:

function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.getName = function(){
console.log("name:" + this.name);
} function Stu(stu_class,name,age){
Person.call(this,name,age);
this.stu_class=stu_class;
} Stu.prototype=new Person;
Stu.prototype.constructors=Stu;
Stu.prototype.getClass=function(){
console.log("班级:" + this.stu_class)
} // 得到一个学员信息对象 var s= new Stu()
console.log(s)

ES6的继承:

   class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
getName(){
return this.name;
}
} class Student extends Person{
constructor(stu_class,name,age){
//需注意如果一个子类继承父类,必须调用super,才能使用constructor,使用this
super(name,age)
}
getClass(){ console.log("班级:"+this.stu_class)
}
} var p=new Person("luoqiang",26)
console.log(p)

注意点:

Class 定义方法是不能使用箭头函数

Class 也可以使用表达式方式声明

参考:https://blog.csdn.net/luoqiang0831/article/details/79641133

ES6中的class 与prototype的更多相关文章

  1. TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)

    8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...

  2. ES5和ES6中的继承 图解

    Javascript中的继承一直是个比较麻烦的问题,prototype.constructor.__proto__在构造函数,实例和原型之间有的 复杂的关系,不仔细捋下很难记得牢固.ES6中又新增了c ...

  3. Nodejs与ES6系列4:ES6中的类

    ES6中的类 4.1.class基本语法 在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码 function Shape(width,height) ...

  4. ES6中Arguments和Parameters用法解析

    原文链接 译文 ECMAScript 6 (也称 ECMAScript 2015) 是ECMAScript 标准的最新版本,显著地完善了JS中参数的处理方式.除了其它新特性外,我们还可以使用rest参 ...

  5. ES6中的Class

    对于javascript来说,类是一种可选(而不是必须)的设计模式,而且在JavaScript这样的[[Prototype]] 语言中实现类是很蹩脚的. 这种蹩脚的感觉不只是来源于语法,虽然语法是很重 ...

  6. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  7. ES6中的Symbol类型

    前面的话 ES5中包含5种原始类型:字符串.数字.布尔值.null和undefined.ES6引入了第6种原始类型——Symbol ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个 ...

  8. ES6中的Set和Map集合

    前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集 ...

  9. ES6中的类

    前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...

随机推荐

  1. 线程安全的概念和Synchronized(读书笔记)

         并行程序开发的一大关注重点就是线程安全,一般来说,程序并行化为了获取更多的执行效率,但前提是,高效率不能以牺牲正确性为代价,线程安全就是并行程序的根本和根基.volatile并不能真正保证线 ...

  2. PS中混合模式是什么意思?

      PS中图层混合模式中的溶解,变暗,正片叠底,颜色加深,线性加深,叠加,柔光,亮光,强光,线性光,点光,实色混合,差值,排除,色相,饱和度,颜色,亮度各是什么原理?   Normal 正常模式,也是 ...

  3. 1BIT,1BYTE,1KB,1MB,1GB,1TB等计量单位换算

    http://iask.sina.com.cn/b/8961090.html知识   在数字世界里没有电影.没有杂志.没有一首首的乐曲,只有一个个的数字“1”和“0”.以前人们对于数字世界中的这两个数 ...

  4. StringBuilder作用

    String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然 ...

  5. dede二级导航与二级栏目 ----内容介绍二级导航

    {dede:channelartlist typeid='top'}//如果只需要拿一列,则需要使用row='1'这个属性否则会根据子频道的数目循环输出 <a href="{dede: ...

  6. Java系统中如何拆分同步和异步

    很多开发人员说,将应用程序切换到异步处理很复杂.因为他们有一个天然需要同步通信的Web应用程序.在这篇文章中,我想介绍一种方法来达到异步通信的目的:使用一些众所周知的库和工具来设计他们的系统. 下面的 ...

  7. 跟我一起写 Makefile(一)[转]

    原文链接 http://bbs.chinaunix.net/thread-408225-1-1.html(出处: http://bbs.chinaunix.net/) 陈皓 概述—— 什么是makef ...

  8. java中url正则regex匹配

    String regex = "^(?:https?://)?[\\w]{1,}(?:\\.?[\\w]{1,})+[\\w-_/?&=#%:]*$"; 解释说明: ^ : ...

  9. 【Java】 Spring依赖注入小试牛刀:编写第一个Spring ApplicationContext Demo

    0  Spring的依赖注入大致是这样工作的: 将对象如何构造(ID是什么?是什么类型?给属性设置什么值?给构造函数传入什么值?)写入外部XML文件里.在调用者需要调用某个类时,不自行构造该类的对象, ...

  10. iframe子页面获取父页面元素的方法

    在iframe子页面获取父页面元素 代码如下: $.('#objld', parent.document); 在父页面获取iframe子页面的元素 代码如下: $("#objid" ...