本文小编为大家详细介绍“es6中class继承调用super的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6中class继承调用super的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 原因:派生出的构造函数不会创造新的this对象,即子类免费云主机、域名没有自己的this;只有通过super()把基类(父类)创建好的this对象接下来,派生类才能像基类一样使用this来生成对象的属性。在学习ES6 class继承时往往提到一个关键点一个子类 SubClass 继承父类 SuperClass 的构造器constructor时有两个要求:1)必须在构造器调用 super( )。2) this必须写在super( )之后。“子类没有自己的 this
”这一概念子类和父类是个相对的概念,因为一个类可以既是子类也是父类,所以ES6里用的是绝对的概念:基类和派生类。而且这个概念是针对所有构造函数说的,JS 里的构造函数要么是基的,要么就是派生的。ES6中,我们随手写的构造函数(function)都是基类,基类可以直接用this来指向调用它所在方法的对象。咱自己给this总结了一句话:谁调用了this,this就指向谁。
functionSuper(name){ this.name=name; SuperFactory.prototype.sayHi=function(){ console.log("Hi"); } } letsuper=newSuper("peter");//通过new创建了新的对象,Super()中的this即指向这个对象
ES6中的派生类,就是extend的class。派生出的构造函数不会创造新的this
对象(或者说this指向的对象
(这里可以回顾一下new关键字做的事情)
,就是所说的”子类没有自己的this”。只有通过super()
把基类创建好的this对象接下来,派生类才能像基类一样使用this来生成对象的属性。
classSuperClass{//基类not父类 constructor(name){ this.name=name; } sayHi(){ console.log("Hi"); } }; classSubClassextendsSuperClass{//派生类not子类 constructor(name,age){ surpe(name); this.age=age; } sayNo(){ console.log("NO"); } }; letsubinst=newsubClass('tom',18); subinst.sayHi();//Hi subinst.sayNo();//NO
是为了避免一个代码陷阱。
classPerson{ constructor(name){ this.name=name; } } classPolitePersonextendsPerson{ constructor(name){ this.greetColleagues();//这里不允许我们使用this,下面解释 super(name); } greetColleagues(){ alert('Goodmorningfolks!'); } }
上面的例子假设调用 super( )之前允许使用 this, 一段时间后为了满足一些需求,我们在 greetColleagues( ) 中添加:
greetColleagues(){ alert('Goodmorningfolks!'); alert('Mynameis'+this.name+',nicetomeetyou!'); }
但是我们忘了,this.greetColleagues( ) 在 super( )调用之前,this.name根本都没有定义,代码会抛错,像这样的代码可能很难想到什么时候发生。因此,为了避免这个陷阱,JavaScript 强制要求在 constructor 中使用 this 之前,必须先调用 super。读到这里,这篇“es6中class继承调用super的原因是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注云技术行业资讯频道。
这篇文章主要讲解了“如何用vue遍历后台数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用vue遍历后台数据”吧! 首先,我们需要明确一点:如何获取后台数据。可以使用Vue.js的Axios插件,它可以请…