// 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. 80端口被NT kernel & System 占用pid 4

    前段时间停止了Apache,结果在打开的时候发现无法打开,80端口被占用,于是win+r 运行cmd 输入netstat -ano 可以看到80端口被PID4占用,于是打开任务管理器-进程-查看,选择 ...

  2. 解决 DCEF3 在 BeforePopup 事件中打开新窗体的问题

    此问题的解决方案从 https://groups.google.com/forum/#!topic/delphichromiumembedded/xzshOr-pjnU 获得. procedure T ...

  3. iterm2相关配置

    使用 iterm2 登陆 公司堡垒机 进行 上传 下载文件 等维护操作.. 1.需要安装iterm2 软件 http://iterm2.com/  下载安装 2.安装brew ruby -e &quo ...

  4. android常见错误--Unable to resolve target ‘android - 8’

    这是由于项目的android的版本没有设置好,解决方法如下: 1,clean项目 选择[project]-[clean] 选中需要进行clean的项目,点击[ok] 2,重新build 选择[proj ...

  5. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  6. Codeforces Round #313 (Div. 2) A. Currency System in Geraldion 水题

    A. Currency System in Geraldion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...

  7. visualsvn server 报错 can't read file "current":End of file out

    需要删除文件:Repositories\ProjectName\db\revprops\X 需要修改文件:repository/db/txn_current.repository/db/current ...

  8. 判断IE中iframe完美加载完毕的方法

    转: var iframe = document.createElement("iframe"); iframe.src = "http://www.planabc.ne ...

  9. 在一个文件中有10G个整数,乱序排列,要求找出中位数

     题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...

  10. 关于使用NotificationComat导致android2.3及以下版本无法显示自定义布局的解决方法.

    大伙都知道 android-support-v4为我们提供了很多兼容的解决方案, 其中就有关于通知栏的. NotificationCompat, 顺利成章操刀显示通知. eg: Intent inte ...