gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
阅读:805回复:0

es5中继承 和 es6中class继承

楼主#
更多 发布于:2024-09-05 14:19


es5中的类

es5中想要生成一个实例对象的话需要先定义一个构造函数,然后通过new操作符来生成实例对象。
当你定义了构造函数并且new 构造函数()了,后台就会隐式执行new Object()创建对象。并将构造函数的作用域给到新对象,即实例对象的this直接指向构造函数,





es6中的类

es6中引入了class类的概念,通过class关键字可以直接定义一个类。
注意事项:
1.定义方法不能使用function关键字
2.方法之间不能用逗号隔开,不然会发生报错


class定义的类实质上就是一个函数,她指向自身相关联的构造函数,可以理解为class类就是构造函数的另一种写法。
在通过class定义的类中也是存在prototype属性的。class定义的类中的所有方法都被保存在prototype中。
可以通过Object.assign方法动态给对象增加方法。
constructor方法是类的构造函数的默认方法,当你生成实例对象时他就默认存在。她默认返回实例对象的this,也可以指定他返回一个全新的对象。
在constructor内部定义的属性可以称为实例属性,constructor外声明的属性都是定义在原型上的,可以称为原型属性。然后通过hasOwnProperty()函数用于判断属性是否是实例属性,返回值为布尔值。然后通过in操作符可以判断属性是否在类中。结合这两个方法可以判断该属性时在类的实例上还是原型上。
class不存在变量提升,所以需要先定义再使用。因为ES6不会把类的声明提升到代码头部,但是ES5就不一样,ES5存在变量提升,可以先使用,然后再定义。


es5中继承
(1)原型链继承:
简单理解就是子类的原型直接指向父类的实例对象。以此继承父类的属性和方法,但是子类没有办法向父类传参。
(2)构造函数继承:
简单理解就是在子类的方法中通过父类.call(this)来修改子类的this指向,让他直接指向父类的实例。但是没有办法继承到父类原型上的方法。
(3)组合继承:结合了前面两种继承方式的优点。技能调用父类的实例属性也能调用父类原型上的属性和方法,也解决了无法传参的缺点。


es6中class继承
首页通过class关键字定义一个类,然后在子类通过extends关键字来继承父类的属性和方法,在子类的constructor方法中通过super()关键字来继承父类的属性,在子类的原型上通过super()关键字来继承父类的方法。
————————————————
                           版权声明:
原文链接:https://blog.csdn.net/weixin_47208955/article/details/111302637
游客


返回顶部