阅读:728回复:0
es5中继承 和 es6中class继承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 |
|