ES6 class的应用实例分析


Posted in Javascript onJune 27, 2019

本文实例讲述了ES6 class的应用。分享给大家供大家参考,具体如下:

class

  • class 本身是个语法糖,主要为了考虑在编码上更加人性化
  • 内部有super,static,get 等关键词
  • 使用起来非常类似于后台语言

使用class进行类的实现应用

'use strict';
// User 类
class User {
 constructor(name,age) {
  this.name = name;
  this.age = age;
 }
 static getName() {
  return 'User';
 }
 static getAge() {
  return this.age;
 }
 setName(name) {
  this.name = name;
 }
 setAge(age) {
  this.age = age;
 }
 get info() {
  return 'name:' + this.name + ' | age:' + this.age;
 }
}
// Manager 类
class Manager extends User{
 constructor(name,age,password){
  super(name,age);
  this.password = this.password;
 }
 changePwd(pwd) {
  return this.password = pwd;
 }
 get info() {
  var info = super.info; // 使用super继承父级 get
  return info + ' === new';
 }
}
// typeof User: function typeof Manager: function
console.log('typeof User: ', typeof User, ' typeof Manager: ', typeof Manager); 
let manager = new Manager('Li', 22, '123456');
manager.setAge(23);
console.log(manager.info); // name:Li | age:23 === new
console.log(User.prototype);
console.log(Manager.prototype);

在class之前使用原型对象定义类的应用

// 构造函数
function User(name,age) {
 this.name = name;
 this.age = age;
}
// 原型
User.prototype = {
 getName:function(){
  return 'User';
 },
 setName:function(name){
  this.name = name;
 },
 getAge:function(){
  return this.age;
 },
 setAge:function(age){
  this.age = age;
 }
}
// 取值函数和存执函数
Object.defineProperty(User.prototype,'info', {
 get() {
  return 'name:' + this.name + ' | age:' + this.age;
 }
});
var user = new User('Joh', 26);
console.log(user); // User {name: "Joh", age: 26}
// 子类
function Manager(name, age, password) {
 User.call(this, name, age);
 this.password = password;
}
Manager.__proto__ = User; // 继承静态方法
Manager.prototype = Object.create(User.prototype); // 继承prototype原型方法
Manager.prototype.changePwd = function (pwd) {
 this.password = pwd;
};
var manager = new Manager('Li', 22, '123456');
manager.setAge(23);
console.log(manager.info); // name:Li | age:23
console.log(User.prototype); // 不变
console.log(Manager.prototype); // {changePwd:function(){}, info:"name:undefined | age:undefined", __proto__:指向Manager.prototype}

使用 class 定义的类不被提升,需按顺序执行

正常:

let user = new class User {
 constructor(name) {
  this.name = name;
 }
}('Joh');
console.log(user); // User {name: "Joh"}

错误:

var man = new Man(); // 此处报错,使用class声明的类不会被提升 Uncaught ReferenceError: Man is not defined
class Man {
 constructor(name){
  this.name = name;
 }
}

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js分解url参数(面向对象-极简主义法应用)
Aug 09 Javascript
jquery validate在ie8下的bug解决方法
Nov 13 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
May 23 Javascript
js严格模式总结(分享)
Aug 22 Javascript
JavaScript常见的五种数组去重的方式
Dec 15 Javascript
javascript笔记之匿名函数和闭包
Feb 06 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
angular中子控制器向父控制器传值的实例
Oct 08 Javascript
ES6 Promise对象的应用实例分析
Jun 27 #Javascript
使用Vue 实现滑动验证码功能
Jun 27 #Javascript
js变量值传到php过程详解 将php解析成数据
Jun 26 #Javascript
javascript触发模拟鼠标点击事件
Jun 26 #Javascript
JavaScript动态添加数据到表单并提交的几种方式
Jun 26 #Javascript
react koa rematch 如何打造一套服务端渲染架子
Jun 26 #Javascript
通过javascript实现段落的收缩与展开
Jun 26 #Javascript
You might like
ThinkPHP php 框架学习笔记
2009/10/30 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
Python 除法小技巧
2008/09/06 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
python自动裁剪图像代码分享
2017/11/25 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
详解Python中namedtuple的使用
2020/04/27 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
财务会计专业自荐书
2014/06/30 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
社区国庆节活动总结
2015/03/23 职场文书
2015年双拥工作总结
2015/04/08 职场文书
运动会通讯稿200字
2015/07/20 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js