// 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的更多相关文章

  1. React入门 (1)—使用指南(包括ES5和ES6对比)

    前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...

  2. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  3. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)

    写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...

  4. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  5. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...

  6. JavaScript、ES5和ES6的介绍和区别

    JavaScript由三部分组成: ECMAScript(核心) DOM(文档对象模型) BOM (浏览器对象模型) ES5(ECMAScript第五个版本) strict模式 严格模式,限制一些用法 ...

  7. ES5和ES6那些你必须知道的事儿(三)

    ES5和ES6那些你必须知道的事儿 ES6新增的东西 一.块级作用域:关键字let,常量const let与var的区别: a.不会进行变量声明提升 b.变量不允许被重复定义 c.变量不允许被删除 d ...

  8. ES5与ES6的小差异

    ES5与ES6的小差异 变量的定义 ES6与ES5的区别 ES5: <script> console.log(username); var username; var username = ...

  9. 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- ...

  10. ES5与ES6的研究

    今天开始ES5与ES6的研究. 1.什么是ES5与ES6? 就是ECMAScript的第五个版本与第六个版本,那么问题来了,什么是ECMAScript?首先它是一种由Ecma国际通过ECMA-262标 ...

随机推荐

  1. hdu 5279 Reflect phi 欧拉函数

    Reflect Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chi ...

  2. 04.URL路径访问与模块控制器之间的关系

    <?php //初使化,进行加载. //通过这个英文名来了解,他是定义的与thinkphp有关的核心框架文件目录路径 //他可以通过这一个常量,在以后运行的时候都去找这个路径,确保在运行过程当, ...

  3. PHP写入文件用file_put_contents代替fwrite优点多多(转)

    使用php有一段时间了,之前一直用fwrite写入文件,不过当我知道file_put_contents这个函数之后,fwrite就比较少用了,file_put_contents比fwrite代码更简洁 ...

  4. 配置Windows Live Writer,写cnblogs博客

    引言        以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等联网在从word里面拷贝出来发布到cnblogs上面,但是样式这些 ...

  5. [带你飞]一小时带你学会Python

    1.面向的读者: 具有Javascript经验的程序猿. 2 快速入门2.1 Hello world 安装完Python之后,打开IDLE(Python GUI) , 该程序是Python语言解释器, ...

  6. java_Oralce

    简单范例 create or replace procedure delete_table is i number(10); begin for x in (select * from emp whe ...

  7. Oracle_集合

    游标遍历select语句 set serveroutput on; declare type sp_test1_cursor is ref cursor; test1_cursor sp_test1_ ...

  8. 使用C#通过Thrift访问HBase

    前言 因为项目需要要为客户程序提供C#.Net的HBase访问接口,而HBase并没有提供原生的.Net客户端接口,可以通过启动HBase的Thrift服务来提供多语言支持. Thrift介绍 环境 ...

  9. 琐碎-hadoop2.2.0伪分布式和完全分布式安装(centos6.4)

    环境是centos6.4-32,hadoop2.2.0 伪分布式文档:http://pan.baidu.com/s/1kTrAcWB 完全分布式文档:http://pan.baidu.com/s/1s ...

  10. 1002 GTY's birthday gift

    GTY's birthday gift                                                                       Time Limit ...