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标 ...
随机推荐
- hdu 5279 Reflect phi 欧拉函数
Reflect Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chi ...
- 04.URL路径访问与模块控制器之间的关系
<?php //初使化,进行加载. //通过这个英文名来了解,他是定义的与thinkphp有关的核心框架文件目录路径 //他可以通过这一个常量,在以后运行的时候都去找这个路径,确保在运行过程当, ...
- PHP写入文件用file_put_contents代替fwrite优点多多(转)
使用php有一段时间了,之前一直用fwrite写入文件,不过当我知道file_put_contents这个函数之后,fwrite就比较少用了,file_put_contents比fwrite代码更简洁 ...
- 配置Windows Live Writer,写cnblogs博客
引言 以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等联网在从word里面拷贝出来发布到cnblogs上面,但是样式这些 ...
- [带你飞]一小时带你学会Python
1.面向的读者: 具有Javascript经验的程序猿. 2 快速入门2.1 Hello world 安装完Python之后,打开IDLE(Python GUI) , 该程序是Python语言解释器, ...
- java_Oralce
简单范例 create or replace procedure delete_table is i number(10); begin for x in (select * from emp whe ...
- Oracle_集合
游标遍历select语句 set serveroutput on; declare type sp_test1_cursor is ref cursor; test1_cursor sp_test1_ ...
- 使用C#通过Thrift访问HBase
前言 因为项目需要要为客户程序提供C#.Net的HBase访问接口,而HBase并没有提供原生的.Net客户端接口,可以通过启动HBase的Thrift服务来提供多语言支持. Thrift介绍 环境 ...
- 琐碎-hadoop2.2.0伪分布式和完全分布式安装(centos6.4)
环境是centos6.4-32,hadoop2.2.0 伪分布式文档:http://pan.baidu.com/s/1kTrAcWB 完全分布式文档:http://pan.baidu.com/s/1s ...
- 1002 GTY's birthday gift
GTY's birthday gift Time Limit ...