ES5中的类
之前小编对于类和类的基本特征(所谓的封装、继承、多态)理解一直不是很到位,同时在实际项目应用中也用的比较少,今天小编就结合ES5中的基本用法和大家聊聊,希望小伙伴会在这篇文章有属于自己的收获,并能够在今后的项目中有实际应用。大家还可以关注我的微信公众号,蜗牛全栈。
一、类的基本用法
function People(name,age){
// this指向的是People{}
this.name = name
this.age = age
}
let p1 = new People("lilei",30)
console.log(p1) // People{name:"lilei",age:34}
let p2 = new People("hanmei",18)
console.log(p2) // People{name:"hanmei",age:18}
二、类的方法:该实例中会有一些资源浪费,因为在每一个实例化的时候,在类中都会存在该方法,实际中为了节约资源,会将类方法定义在原型上
function People(name,age){
// this指向的是People{}
this.name = name
this.age = age
this.showName = function(){
console.log("当前人的名字是:"+this.name)
}
}
let p1 = new People("lilei",30)
console.log(p1) // People{name:"lilei",age:34}
p1.showName() // 当前人的名字是:lilei
let p2 = new People("hanmei",18)
console.log(p2) // People{name:"hanmei",age:18}
p2.showName() // 当前人的名字是:hanmei
三、实际类方法创建实例
function People(name,age){
this.name = name
this.age = age
}
People.prototype.showName = function(){
console.log(this.name)
}
let p1 = new People("lilei",30)
console.log(p1) // People{name:"lilei",age:34}
p1.showName() // lilei
let p2 = new People("hanmei",18)
console.log(p2) // People{name:"hanmei",age:18}
p2.showName() // hanmei
四、类的静态属性和静态方法:上述的例如name和age属性,都是实例化之后才有的属性和方法,上述属性和方法一般称为实例属性和实例方法,需要类实例化之后才可以处理的属性,实例方法需要把类实例化之后才能调用。静态属性和静态方法可以通过类直接调用,不必实例化。类的静态属性
function People(name,age){
// this指向的是People{}
this.name = name // 实例属性
this.age = age // 实例属性
}
People.count = 10
console.log(People.count) // 10
类的静态方法
function People(name,age){
// this指向的是People{}
this.name = name // 实例属性
this.age = age // 实例属性
}
People.getCount = function(){
console.log("当前数字为"+People.count)
}
console.log(People.count) // 10
五、类的继承
1、构造函数继承:只能继承父类的属性,不能继承父类的方法
// 父类
function Animal(name){
this.name = name
} Animal.prototype.showName = function(){
console.log("名字是:"+this.name)
} // 子类
function Dog(name,color){
Animal.call(this,name) // 继承属性
this.color = color
} let d1 = new Dog("wangcai","white")
console.log(d1) // Dog{name:"wangcai",color:"white"}
d1.showName() // 报错:d1.showName is not a function // 构造函数继承只能继承父类的属性,不能继承父类的方法
2、原型继承:只能继承父类方法,不能继承父类属性
// 父类
function Animal(name){
this.name = name
} Animal.prototype.showName = function(){
console.log("名字是:"+this.name)
} // 子类
function Dog(name,color){
// Animal.call(this,name) // 继承属性
this.color = color
}
Dog.prototype = new Animal()
Dog.prototype.constuctor = Dog let d1 = new Dog("wangcai","white")
console.log(d1) // Dog{name:"wangcai",color:"white"}
d1.showName() // undefind
ES5中的类的更多相关文章
- Es5中的类和静态方法 继承
Es5中的类和静态方法 继承(原型链继承.对象冒充继承.原型链+对象冒充组合继承) // es5里面的类 //1.最简单的类 // function Person(){ // this.name='张 ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES5中的类与继承
最近在重新复习TypeScript,看到类这块的时候自然会和ES5中的类写法进行对比加深印象. 发现ES5的类与继承一些细节还是挺多的,时间久了容易忘记,特此记录下. 首先是ES5的类定义,这没什么好 ...
- Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 在ES5中模拟类
1.Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. var _this = Object.create(fn.prototype);这句代码的 ...
- ES6中的类
前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...
- koa 基础(十七)原生 JS 中的类、静态方法、继承
1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...
- 《深入理解ES6》笔记—— JavaScript中的类class(9)
ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构. ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值给构 ...
- ES6中的类继承和ES5中的继承模式详解
1.ES5中的继承模式 我们先看ES5中的继承. 既然要实现继承,首先我们得要有一个父类. Animal.prototype.eat = function(food) { console.log(th ...
随机推荐
- Root mapping definition has unsupported parameters
使用ElasticSearch创建映射报错 Root mapping definition has unsupported parameters 原因 使用的ES版本为7.2.0,不再支持创建指定类型 ...
- 【Linux】在centos中使用命令安装redis
1.前提centos能够上网 测试方式输入命令,有数据返回即可.如果则先配置centos网络连接. ping www.baidu.com 2.安装gcc 输入命令进行安装 yum install gc ...
- 这次我好像才真的明白了CSS Rem字体计算的原理
背景 如何按照设计稿中标注的尺寸,直接写页面的样式,不再需要px2rem这样的工具或者人工转换 ? 只要你明白了rem的计算原理,这个问题的答案超级简单. 根字体大小计算核心原理 设备的根字体大小 * ...
- Linux Limit相关内容设置大全(值得收藏)
目录 一. /etc/security/limits.conf 详解 /etc/security/limits.conf 配置解析 /etc/security/limits.d/目录 二. ulimi ...
- JUC 并发类概览
JUC 并发类及并发相关类概览,持续补充... AQS 内部有两个队列,一个等待队列(前后节点),一个条件队列(后继节点),其实是通过链表方式实现: 等待队列是双向链表:条件队列是单向链表:条件队列如 ...
- 线程本地存储(动态TLS和静态TLS)
线程本地存储(TLS) 对于多线程应用程序,如果线程过于依赖全局变量和静态局部变量就会产生线程安全问题.也就是一个线程的使用全局变量可能会影响到其他也使用此全局变量的线程,有可能会造成一定的错误,这可 ...
- QFNU-ACM 2019.5.23组队赛 2019山东省赛复现
A.Calandar 题意:一年12个月,一个月30天,5天一周,已知某天的年月日星期数,求所给年月日的星期数是多少 思路:直接进行计算,其实每个月每年都是等长度的就使得计算的时候忽略年月,可以直接进 ...
- 《前端运维》一、Linux基础--02用户与权限
其实说真的,这些基础挺枯燥的,内容呢绝大多数都是些静态的. 上一篇文章我们学习了基本的指令和vim编辑器的操作方法.这篇文章我们主要来学习下Linux中用户的概念和权限相关的知识. 一.用户与用户组 ...
- 【Azure 云服务】Azure Cloud Service 创建 Alert 指南 [基于旧版 Alert(Classic)不可用情况下]
问题描述 在Azure云服务(Cloud Service)创建Alert(Classic)时候遇见失败消息:"Failed to update alert testclassicalertr ...
- Envoy:主动健康监测
实验文件 docker-compose version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest enviro ...