js中class的用法是什么?一文带你快速了解
Admin 2021-08-20 群英技术资讯 1353 次浏览
这篇文章给大家分享的是有关js中class怎么用的内容。js中class的用法是比较重要的内容,因此分享给大家做个参考,接下来一起跟随小编看看吧。
先复习一下es5常用的构建类的方法:首先es5的写法使用原型进行对象的方法的,为什么不在构造函数里添加方法呢?因为实例化对象的时候,会重复的建立好多相同的方法,浪费资源。所以需要把对象的方法挂载到prtotype里。
关于new和this的绑定问题,可以大概简化为:
那么接下来看例子吧:
fuction Animal(name,age){ this.name = name this.age = age // 这样是浪费资源的 // this.eat = function(){ // console.log("今天我吃饭了") // } } // 正确做法 Animal.prototype.eat=function(){ console.log("今天我吃饭了") }
然后上ES6的class,class很明显就简化了这个操作
cosnt dog = new Animal("wangcai",2) // 会报错,ES6为了修改陋习,和let和const一样,class不会提升. class Animal{ constroctor(name,age){ this.name = name this.age = age } eat(){ console.log("今天我吃饭了") } } cosnt dog = new Animal("wangcai",2) //正确位置
另外class还添加了静态方法,set,get等操作。
class Animal{ constroctor(name,age){ this.name = name this.age = age } eat(){ console.log("今天我吃饭了") } set name(value){ this.tempname ="老铁"+value } get name(){ return this.tempname } static introuduce(){ console.log("我现在是一个动物类") } } //set() get() const dog = new Animal("giao",2) dog.name="agiao" console.log(dog.name) // 老铁agiao // 静态方法 Animal.introuduce() // 我现在是一个动物类
再说继承之前补充个小知识点,class的方法名可以通过计算属性的操作来命名
let tempname = "giao" class Animal{ constroctor(name,age){ this.name = name this.age = age } [tempname](){ console.log("一给我咧giao") } } const xiaoagiao = new Animal("giaoge",30) xiaoagiao.giao() // 一给我咧giao
回到继承这个问题,es5是怎么继承的呢?
function Animal( name ){ this.name = name } Animal.prototype.break(){ console.log("叫!") } function Dog( name, age ){ Animal.call(this,name) this.age = age } Dog.prototype = new Animal() Dog.prototype.constructor = Dog
那么这个叫组合继承,怎么个组合法呢?
属性方面的继承是借用继承,可以看到Animal.call(this,name)就是相当于把Animal这个函数在Dog的构造函数里调用了一遍而已。虽然属性他们没有原型链的链式联通,但是代码拿过来给Dog都跑了一遍,所以自然就继承了Animal的name属性。
Animal.call(this,name)
方法的继承是原型式继承,众所周知,一个函数会在创建的时候生成一个原型对象,这个函数的的一个protoype属性指向他的原型对象,原型对象的constructor属性指向这个函数。如果用new来新建这个函数的实例,这个实例会有一个__proto__的属性指向函数的原型对象。所以借用函数实例会指向函数原型对象这个特性,我们将被继承的函数实例化,然后将这个实例化的对象赋给继承的构造函数的prototype属性,这样就构成了一种链式结构。但同被继承的函数实例化是不具备constructor这个属性的,我们需要将他的constructor指向继承的构造函数。
Dog.prototype = new Animal() Dog.prototype.constructor = Dog
所以按照这个套路,我们用es5的语法,将dog函数继承了Animal函数的name和break方法.
那么ES6是怎么做的呢?
class Animal{ constructor( name ){ this.name = name } break(){ console.log("叫!") } } class Dog extends Animal { constructor( name, age ){ super(name) this.age=age } }
现在只需要在声明Dog类的时候加一个extends Animal,然后再在constructor构造函数里加一个super就好了。
这个super(name)就相当于Animal.call(this,name)了。然后关于方法的问题,自然就不用担心了,extends自动就处理好了,就不用再去用prototype乱指了.
以上就是关于js中class的用法介绍,上述实例对大家学习class的用法有一定的参考价值,有需要的朋友可以看看,希望本文对大家有帮助,想要了解更多js中class的用法,请搜索群英网络以前的文章或继续浏览下面的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录1.ES5常用:利用for嵌套for,然后splice去重2.ES6常用:Set去重3.indexOf去重4.sort()排序5.对象属性不能相同(不建议)6.includes()7.hasOwnProperty8.filter9.利用递归去重10.Map去重11.reduce+includes1.ES5常用:利用
Nodejs构建mock数据并通过restapi风格调用接口访问数据如果我们只有json格式的数据文件,我们想通过访问url方式调用居然数据 确保电脑安装node环境如果你没有安装好node环境请移步http://nodejs.cn/ 一、安装json-server 1.新建demo文件cddemo 2.安装json-server npminstall-Sjson-
在JS中,我们经常会遇到原型。字面上的意思会让我们认为,是某个对象的原型,可用来继承。但是其实这样的理解是片面的,下面通过本文来了解原型与原型链的细节,再顺便谈谈继承的几种方式。
之前我们了解了很多样式的菜单,例如下拉式菜单、悬浮式菜单等等,今天我们来了解一下堆叠式菜单,这篇文就主要给大家分享用jquery插件实现堆叠式菜单效果,下文代码有一定的参考价值,感兴趣的朋友可以参考。
本文给大家分享的是vue中引入jquery的方法,下文有具体的操作步骤,有这方面需要的朋友可以参考了解看看,接下来我们就一起来了解一下要怎样做吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008