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查找父节点的简单方法
Jun 28 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
PHP结合jQuery实现红蓝投票功能特效
Jul 22 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
基于require.js的使用(实例讲解)
Sep 07 Javascript
手把手教你写一个微信小程序(推荐)
Oct 17 Javascript
jQuery实现可编辑的表格
Dec 11 jQuery
小程序实现tab标签页
Nov 16 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
小偷PHP+Html+缓存
2006/12/20 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
JavaScript File分段上传
2016/03/10 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
python单线程实现多个定时器示例
2014/03/30 Python
python基础教程之Hello World!
2014/08/29 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python实现kNN算法
2017/12/20 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
Python解析json代码实例解析
2019/11/25 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
领导欢迎词致辞
2015/01/23 职场文书