初探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 相关文章推荐
datePicker——日期选择控件(with jquery)
Feb 20 Javascript
jQuery打印图片pdf、txt示例代码
Jul 22 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
jQuery实现图片局部放大镜效果
Mar 17 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
vue中axios请求的封装实例代码
Mar 23 Javascript
JavaScript中this的全面解析及常见实例
May 14 Javascript
Vue动态面包屑功能的实现方法
Jul 01 Javascript
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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php&mysql 日期操作小记
2012/02/27 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python如何将图片转换为字符图片
2020/08/19 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python with语句的原理与用法详解
2020/03/30 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
2014年客服工作总结范文
2014/11/13 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
处理canvas绘制图片模糊问题
2022/05/11 Javascript