初探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 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
在textarea文本域中显示HTML代码的方法
Mar 06 Javascript
javascript indexOf函数使用说明
Jul 03 Javascript
js有关元素内容操作小结
Dec 20 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
Sep 21 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
Angular 2父子组件之间共享服务通信的实现
Jul 04 Javascript
记一次用vue做的活动页的方法步骤
Apr 11 Javascript
小程序云开发实现数据库异步操作同步化
May 18 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
隐性调用php程序的方法
2015/06/13 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
python实现多进程代码示例
2018/10/31 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
python next()和iter()函数原理解析
2020/02/07 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
中科软笔试题和面试题
2014/10/07 面试题
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript