初探JavaScript 面向对象(推荐)


Posted in Javascript onSeptember 03, 2017

类的声明

1. 构造函数

function Animal() {
 this.name = 'name'
}
// 实例化
new Animal()

2. ES6 class

class Animal {
 constructor() {
  this.name = 'name'
 }
}
// 实例化
new Animal()

类的继承

1. 借助构造函数实现继承

原理:改变子类运行时的 this 指向,但是父类原型链上的属性并没有被继承,是不完全的继承

function Parent() {
 this.name = 'Parent'
}
Parent.prototype.say = function(){
 console.log('hello')
}
function Child() {
 Parent.call(this)
 this.type = 'Child'
}
console.log(new Parent())
console.log(new Child())

2. 借助原型链实现继承

原理:原型链,但是在一个子类实例中改变了父类中的属性,其他实例中的该属性也会改变子,也是不完全的继承

function Parent() {
 this.name = 'Parent'
 this.arr = [1, 2, 3]
}
Parent.prototype.say = function(){
 console.log('hello')
}
function Child() {
 this.type = 'Child'
}
Child.prototype = new Parent()
let s1 = new Child()
let s2 = new Child()
s1.arr.push(4)
console.log(s1.arr, s2.arr)
console.log(new Parent())
console.log(new Child())
console.log(new Child().say())

3. 构造函数 + 原型链

最佳实践

// 父类
function Parent() {
 this.name = 'Parent'
 this.arr = [1, 2, 3]
}
Parent.prototype.say = function(){
 console.log('hello')
}
// 子类
function Child() {
 Parent.call(this)
 this.type = 'Child'
}
// 避免父级的构造函数执行两次,共用一个 constructor
// 但是无法区分实例属于哪个构造函数
// Child.prototype = Parent.prototype
// 改进:创建一个中间对象,再修改子类的 constructor
Child.prototype = Object.create(Parent.prototype)
Child.prototype.constructor = Child
// 实例化
let s1 = new Child()
let s2 = new Child()
let s3 = new Parent()
s1.arr.push(4)
console.log(s1.arr, s2.arr) // [1, 2, 3, 4] [1, 2, 3]
console.log(s2.constructor) // Child
console.log(s3.constructor) // Parent
console.log(new Parent())
console.log(new Child())
console.log(new Child().say())

总结

以上所述是小编给大家介绍的JavaScript 面向对象(推荐)的相关知识,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
在线编辑器中换行与内容自动提取
Apr 24 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
基于javascript实现样式清新图片轮播特效
Mar 30 Javascript
js选项卡的制作方法
Jan 23 Javascript
利用PM2部署node.js项目的方法教程
May 10 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
js 图片转base64的方式(两种)
Apr 24 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
Sep 16 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
jquery+css实现下拉列表功能
Sep 03 #jQuery
使用JavaScript实现点击循环切换图片效果
Sep 03 #Javascript
jQuery中.attr()和.data()的区别分析
Sep 03 #jQuery
Angular4表单验证代码详解
Sep 03 #Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 #jQuery
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 #Javascript
javascript帧动画(实例讲解)
Sep 02 #Javascript
You might like
php发送post请求函数分享
2014/03/06 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
js回调函数仿360开机
2019/12/26 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
《我的信念》教学反思
2014/02/15 职场文书
六五普法规划实施方案
2014/03/21 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
师德师风建设方案
2014/05/08 职场文书
作风建设剖析材料
2014/10/06 职场文书
家属答谢词
2015/01/05 职场文书
辞职信如何写
2015/02/27 职场文书
办公室个人总结
2015/02/28 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript