es5 和 es6 class
// ES5
function User(name,age) {
this.name = name;
this.age = age;
} // 静态方法
User.getClassName = function(){
return 'User'
} User.prototype.changeName = function(name){
this.name = name
} User.prototype.changeAge = function(Age){
this.Age = Age
} Object.defineProperty(User.prototype,'info',{
get(){
return 'name'+this.name+'age'+this.age
}
})
// 子类
function Manager(name,age,password){
User.call(this,name,age);
this.password = password
} // 继承静态方法
Manager.__proto__ = User // 继承原型方法
Manager.prototype = User.prototype; //添加新方法
Manager.prototype.changePassword = function(pwd){
this.password = password
}
var manager = new Manager('leo',22,'123');
manager.changeName('zengliang');
console.log(User.name) //User
console.log(manager.name) //zengjiang function test(){
console.log("1")
}
console.log(test.name) //test
ES6
// 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
// }
// User.prototype.changeAge = function(Age){
// this.Age = Age
// }
changeName(name){
this.name = name
}
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
// }
class Manager extends User{
// 和call的区别,call先创建自身对象
constructor(name,age,password){
// super先创建父对象 必须
super(name,age);
this.password = password
}
// //添加新方法
// Manager.prototype.changePassword = function(pwd){
// this.password = password
// }
changePassword(password){
this.password = password
}
get info(){
var info = super.info;
console.log(info)
}
}
// 下面的静态方法跟原型方法已经继承了,无须写其他的
// // 继承静态方法
// Manager.__proto__ = User
// // 继承原型方法
// Manager.prototype = User.prototype;
console.log(typeof User,typeof Manager)//function function
// var manager = new Manager('leo',22,'123');
// manager.changeName('zengliang');
// console.log(User.name) //User
// console.log(manager.name) //zengjiang
// function test(){
// console.log("1")
// }
// console.log(test.name) //test
不会提升
// // 立即执行
// let user = new class User{
// constructor(name){
// this.name = name
// }
// }('zengliang');
// console.log(user) // 会报错,因为不会提升
// var user = new User()
// class User{
// constructor(name){
// this.name = name
// }
// }
es5 和 es6 class的更多相关文章
- React入门 (1)—使用指南(包括ES5和ES6对比)
前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...
- ES5和ES6中对于继承的实现方法
在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...
- JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...
- JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)
本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...
- JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)
多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...
- JavaScript、ES5和ES6的介绍和区别
JavaScript由三部分组成: ECMAScript(核心) DOM(文档对象模型) BOM (浏览器对象模型) ES5(ECMAScript第五个版本) strict模式 严格模式,限制一些用法 ...
- ES5和ES6那些你必须知道的事儿(三)
ES5和ES6那些你必须知道的事儿 ES6新增的东西 一.块级作用域:关键字let,常量const let与var的区别: a.不会进行变量声明提升 b.变量不允许被重复定义 c.变量不允许被删除 d ...
- ES5与ES6的小差异
ES5与ES6的小差异 变量的定义 ES6与ES5的区别 ES5: <script> console.log(username); var username; var username = ...
- React Native的语法之ES5和ES6
原文地址:http://www.devio.org/2016/08/11/React-Native%E4%B9%8BReact%E9%80%9F%E5%AD%A6%E6%95%99%E7%A8%8B- ...
- ES5与ES6的研究
今天开始ES5与ES6的研究. 1.什么是ES5与ES6? 就是ECMAScript的第五个版本与第六个版本,那么问题来了,什么是ECMAScript?首先它是一种由Ecma国际通过ECMA-262标 ...
随机推荐
- SQL Server 数据导入Mysql详细教程
- HDU 1080 DP
匹配两个人相似度. A,G,C.T.每两个都会有一个相应的值,给出两串基因.长度能够不一样,能够在基因中间加_使两串长度一样.然后有一个相应值.求最大相应值. 先做出相应的表 DP方程: x=dp[i ...
- [AngularJS] ui-router: named views
The ui-router library for AngularJS provides the ability to name views within your application. This ...
- iOS开发——语法&高级Block练习
高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...
- php实现网页标签补全方法(转)
导读:PHP在生成静态文件的时候,有时候会因为一些混编问题让HTML标签不完整或混乱而导致页面混乱.作者分享下面这段小代码可以非常方便解决问题. 如果你的网页内容的html标签显示不全,有些表格标签不 ...
- 解决Mac下SublimeLinter的Unsafe Characters警告
Mac下编辑JS文件, 如果是中文字符的行会警告: This character may get silently deleted by one or more browsers. SublimeLi ...
- MHA手动切换 原创4 (非交互式切换)
非交互式切换:不输 YES 或者 NO [root@monitor app1]# masterha_master_switch --conf=/etc/masterha/app1.conf --mas ...
- 高级进程间通信之基于STREAMS的管道
基于STREAMS的管道(简称STREAMS管道,STREAMS pipe)是一个双向(全双工)管道.单个STREAMS管道就能向父.子进程提供双向的数据流. 将http://www.cnblogs. ...
- 实例源码--Android小工具源码
下载源码 技术要点: 1. Android控件布局的使用 2. Http通信 3. XML数据解析 4. 网络状态的监听 5. 源码带有非常详细的中文注释 ...... 详细介绍: 1. An ...
- 如何获取input自定义属性
javascript方法: <input type="checkbox" name="sdf" data="这是自定义属性" /& ...