.class中方法定义有几种,怎样什么声明类的
Admin 2022-08-11 群英技术资讯 268 次浏览
我们会发现,按照之前学习过的构造函数形式创建 类 ,不仅仅和编写普通的函数过于相似,而且代码并不容易理解。
在 ES6(ECMAScript2015)新的标准中使用了class关键字来直接定义类;
但是类本质上依然是之前所学习过的构造函数、原型链的语法糖而已。所以学好之前的构造函数、原型链更有利于我们理解类的概念和继承关系。
class 关键字 类的声明
class Person{}
类表达式(不常用)
var People = class { }
那么 Person类的原型是什么?如下展示了原型和typeof中Person的类型
console.log(Person.prototype) // Person {} console.log(Person.prototype.__proto__) // {} console.log(Person.constructor) // [Function: Function] console.log(typeof Person) // function
如果我们希望在创建对象的时候给类传递一些参数,这个时候应该怎么做呢?
constructor
。constructor
。示例代码如下:
// 类的声明 class Person { // 类的构造方法 constructor(name, age) { this.name = name this.age = age } foo () { console.log(this.name) } } var p1 = new Person('h', 19) console.log(p1)// Person { name: 'h', age: 19 } p1.foo() // h
当我们通过new关键字操作类的时候,会调用这个
constructor
函数,并执行如下操作(假设new关键字新创建的对象为p1):
- 在内存中创建一个对象
- 将类的原型prototype赋值给创建出来的对象
p1.__proto__ = Person.prototype
- 将对象赋值给函数的this:new绑定
this = p1
- 执行函数体中的代码
- 自动返回创建出来的对象
**
class Person { // 类的构造方法 constructor(name, age) { this.name = name this.age = age this._address = '北京市' } eating () { console.log(this.name + ' 正在eating~') } running () { console.log(this.name + ' 正在running~') } } var p1 = new Person('jam', 19) console.log(p1) p1.eating() p1.running()
class Person { // 类的构造方法 constructor(name, age) { this.name = name this.age = age this._address = '北京市' } // 类的访问器方法 get address () { // 在这里可以设置拦截访问操作 console.log('获取呢') return this._address } set address (newValue) { // 在这里可以设置拦截设置操作 console.log('修改呢') return this._address = newValue } } var p1 = new Person('jam', 19) console.log(p1.address) p1.address = '天津市' console.log(p1.address)
类的静态方法就是在方法前加一个
static
关键字,该方法就成为了类的静态方法。
类的静态方法,不会被类的实例继承,而是直接通过类来调用。
小案例:使用类的静态方法完成随机生成Person实例
class Person { // 类的构造方法 constructor(name, age) { this.name = name this.age = age this._address = '北京市' } // 类的静态方法(也称为类方法) 创建对象随机生成一个名字小案例 static randomPerson () { // 创建一个存储名字的数组 let names = ['jam', 'jak', 'jag', 'jao', 'jno'] // Math.random()生成一个0-1之间的数字,小数肯定是不对的 let nameIndex = Math.floor(Math.random() * names.length) let name = names[nameIndex] // 生成随机年龄 let age = Math.floor(Math.random() * 100) // return随机生成的人物 姓名+ 年龄 return new Person(name, age) } }
这里直接调用类的静态方法就可以 不需要使用new操作符创建创建实例对象
随机生成一个Person实例(附效果图)
// 随机生成一个 var p2 = Person.randomPerson() console.log(p2)
随机生成多个Person实例(附带效果图)
// 随机生成多个 for (let index = 0; index < 20; index++) { console.log(Person.randomPerson()) }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录前言????目标????搭建开发环境????️生成模板????CSS预处理器????eslint????组件库编译⚡️vite的打包配置⚡️自动生成ts类型文件⚡️样式懒加载与全量加载????文档❤️npm 发布与发布前的测试????测试前言日常使用开源的组件库时我们或多或少的都会做一些自定义的配置来符合实际的设计,当这些设计形成一定规模时,设计狮们就会形成一套
怎样用vue做下拉加载更多效果?我们在很多文章或者咨询网站上,常常能看到下拉加载更多效果,这种效果能好的折叠空间,让网站排名更美观,因此很多站长会应用这个效果,那么用vue如何实现下拉加载更多效果呢?下面我们来具体看看。
目录router 动态路由清除vue-router退出登录清空路由router 动态路由清除重置matcher可达到路由还原效果在用户退出时调用 resetRouter(router) 即可还原路由import Vue from vueimport Router from vue-routerimport { cons
这篇文章主要为大家详细介绍了JavaScript实现简易左右点击切换图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了微信小程序实现多列选择器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008