JavaScript es6 class类的理解。
本着互联网的分享精神,在本篇文章我将会把我对JavaScript es6 class类的理解分享给大家。
JavaScript 类主要是 JavaScript 现有的基于原型的继承的语法糖。 类语法不是向JavaScript引入一个新的面向对象的继承模型。JavaScript类提供了一个更简单和更清晰的语法来创建对象并处理继承。
使用es写一个类(构造函数)
在es5中大家一般都这么写一个类(构造函数)
另外需要注意,class类不会被提升。
// 创建一个User构造函数
function User(name, age) {
this.name = name;
this.age = age;
}
// User构造函数的静态方法。
User.getClassName = function () {
return 'User';
};
// User构造函数的动态方法
User.prototype.changeName = function (age) {
this.age = age
};
Object.defineProperty(User.prototype, 'info', {
get (){
return 'name: ' + this.name + '|' + 'age: ' + this.age
}
});
// 创建一个Manager 构造函数
function Manager(name, age, password) {
User.call(this, name, age); //将User函数call到Manager函数内
this.password = password
}
// 继承User的静态方法
Manager.__proto__ = User;
// 调用继承User的getClassName 方法。
console.log(Manager.getClassName());
// 继承User动态方法
Manager.prototype = User.prototype;
// 创建一个新的动态方法 changePassword
Manager.prototype.changePassword = function (pwd) {
this.password = pwd
};
//实例化Manager 构造函数。
var manager = new Manager('zhang', 22, '123');
manager.changeName('23');
console.log(manager.info);
将es5的构造函数转换为es6的类
以上方法确实没有什么问题,但是相对于es6的class来讲没有那么优雅,下面我就用es6的语法让代码优雅一点。
其实本质上都是一样的,只不过是一个语法糖。
/**
* Created by 张佳伟 on 2017/5/2.
*/
'use strict';
// function User(name, age) {
// this.name = name;
// this.age = age;
// }
class User {
// 构造函数 现在叫类 本质是一样的,其实就是一个语法糖。
constructor(name, age) {
this.name = name;
this.age = age;
} // User.getClassName = function () {
// return 'User';
// };
// 静态方法
static getClassName() {
return 'User';
} // User.prototype.changeName = function (name) {
// this.name = name;
// };
// 动态方法,相当于es中的prototype
changeName(name) {
this.name = name;
} // User.prototype.changeAge = function (age) {
// this.age = age;
// };
changeAge(age) {
this.age = age;
} // Object.defineProperty(User.prototype, 'info', {
// get (){
// return 'name: ' + this.name + '|' + 'age: ' + this.age
// }
// });
get info() {
return 'name:' + this.name + '|age:' + this.age;
}
}
;
// function Manager(name, age, password) {
// User.call(this, name, age);
// this.password = password;
// }
//继承静态方法
// Manager.__proto__ = User;
// //继承prototype原型方法
// Manager.prototype = User.prototype;
// 继承这里省事吧,一步就到位了
class Manager extends User {
constructor(name, age, password) {
super(name, age); //这个我下面会将,这里先暂时理解为call,但是注意他和call可不一样。
this.password = password;
} changePassword(password) {
return this.password = password;
} get info() {
var info = super.info; //这个是父类的info,当然你也可以重写info这个方法。那就是删掉这句代码,在写上新的就行拉~
return info
}
}
// console.log(typeof User, typeof Manager);
var manager = new Manager('leo', 22, '123');
// manager.changeName('铅笔'); console.log(manager.info);
console.log(manager.changePassword(456))
立即执行类的写法
'use strict';
// 立即执行的类
let User = new class User {
constructor(name){
this.name = name;
}
}('铅笔')
console.log(User)
super
super 关键字用于调用一个对象的父对象上的函数。
super的语法
super([arguments]); // 调用 父对象/父类 的构造函数
super.functionOnParent([arguments]); // 调用 父对象/父类 上的方法
在构造函数中使用时,super关键字单独出现,必须在可以使用this关键字之前使用。此关键字也可用于调用父对象上的函数。
class Polygon {
constructor(height, width) {
this.name = 'Polygon';
this.height = height;
this.width = width;
}
sayName() {
console.log('Hi, I am a ', this.name + '.');
}
}
class Square extends Polygon {
constructor(length) {
this.height;
// ReferenceError,super 需要先被调用!
/*
这里,它调用父类的构造函数的 length,
作为Polygon 的 width和 height.
*/
super(length, length);
/*
注意: 在派生的类中, 在你可以使用'this'之前, 必须先调用super()。
忽略这, 这将导致引用错误。
*/
this.name = 'Square';
}
get area() {
return this.height * this.width;
}
set area(value) {
this.area = value;
}
}
调用父类上的静态方法
class Human {
constructor() {}
static ping() {
return 'ping';
}
}
class Computer extends Human {
constructor() {}
static pingpong() {
return super.ping() + ' pong';
}
}
Computer.pingpong(); // 'ping pong'
JavaScript es6 class类的理解。的更多相关文章
- ES6 class 类的理解(一)
优点 ES6 的类提供了几点明显的好处: 兼容当前大量的代码. 相对于构造器和构造器继承,类使初学者更容易入门. 子类化在语言层面支持. 可以子类化内置的构造器. 不再需要继承库:框架之间的代码变得更 ...
- JavaScript ES6 Symbol.hasInstance的理解。
Symbol.hasInstance 本案例是结合阮一峰老师的ECMAScript 6 入门丛书进一步的详细介绍,和对Symbol.hasInstance的理解.本着互联网的精神,分享给大家. 对象的 ...
- 《深入理解ES6》笔记—— JavaScript中的类class(9)
ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构. ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值给构 ...
- JavaScript ES6 promiss的理解。
本着互联网的分享精神,我将我对promise的理解分享给大家. JavaScript ES6的promise方法主要应用在处理异步函数返回的结果,注意他不是将异步函数转换为同步函数,而是等异步函数有结 ...
- ES6中的class类的理解
传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...
- (ES6)JavaScript中面向对象类的实现
在ES5中,我们就知道JS是不支持面向对象的,所以用函数模拟了一个构造函数来实现类的.那么在ES6中,在ES5的原理基础上,将代码书写更为简单,明了. 一.怎样用ES6创建类?首先看一看例子: cla ...
- javascript类的理解和使用
距离上次写博客已经过去好几个月了,现在手里的项目正好都结束了,闲暇之后开始理一下开发中一些问题,这次说一下javascript当中的类,可能很多人对于写惯了前台页面效果的coder来说,对于javas ...
- 深入理解JavaScript中的类继承
由于写本文时全部是在编辑器中边写代码边写感想的,所以,全部思想都写在代码注释里面了 // 类继承 //todo.1 extends 关键字 class Animal { constructor(nam ...
- ES6入门——类的概念
1.Class的基本用法 概述 JavaScript语言的传统方式是通过构造函数,定义并生成新对象.这种写法和传统的面向对象语言差异很大,下面是一个例子: function Point(x, y) { ...
随机推荐
- C#基础笔记(第二十二天)
1.单例模式1)将构造函数私有化2)提供一个静态方法,返回一个对象3)创建一个单例 2.XML可扩展的标记语言 HTMLXML:存储数据 不是单独.net的东西,是一个单独的,JAVA什么的都也用不需 ...
- DS博客作业01-日期抽象数据类型的设计与实现
1.思维导图和学习体会 1.1绪论知识思维导图 1.2学习体会 通过这几节课数据结构的新学习,让我感到了难度,很多概念性的东西,不是很好理解,老师在讲内容的时候,很容易跟不上节奏,我发现这门课的学习一 ...
- leetcode 72 编辑距离 JAVA
题目: 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 ...
- 使用apache-fileupload处理文件上传与上传多个文件 二(60)
一 使用apache-fileupload处理文件上传 框架:是指将用户经常处理的业务进行一个代码封装.让用户可以方便的调用. 目前文件上传的(框架)组件: Apache----fileupload ...
- Spring框架注解
这四个注解,功能都是一样的,都是用来创建对象的. 但是为什么有这么四个吗?Spring中提供了三个@Component的衍生注解:(功能目前来讲是一样的) @Controller :WEB层 ...
- Codeforces Global Round 2部分题解
传送门 好难受啊掉\(rating\)了-- \(A\ Ilya\ and\ a\ Colorful\ Walk\) 找到最后一个与第一个颜色不同的,比一下距离,然后再找到最左边和最右边与第一个颜色不 ...
- Java 设计模式之单利模式
一.首先介绍一下单例模式: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局 ...
- win7 下如何安装 Microsoft Web Application Stress Tool
Microsoft Web Application Stress Tool是一个简单易用的性能压力测试工具,但因为其诞生的年代较早,在目前的win7系统下运行,会存在一些兼容性的问题,以下是我在实际使 ...
- 2016级算法期末模拟练习赛-D.AlvinZH的序列问题
1111 AlvinZH的序列问题 思路 中等题,动态规划. 简化题意,. 坑点一:二维int数组MLE,明显会超过内存限制,由于\(n\)最大为1e4,那么我们的dp数组最大也是1e4,考虑使用sh ...
- C#-WinForm-TextBox中只能输入数字的几种常用方法(C#)
方法一: private void tBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 0x20) e.KeyCh ...