初探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 相关文章推荐
jquery 简单的进度条实现代码
Mar 11 Javascript
js前台判断开始时间是否小于结束时间
Feb 23 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
浅析AngularJS中的指令
Mar 20 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
Jan 20 Javascript
jquery拖动改变div大小
Jul 04 jQuery
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
基于vue.js实现的分页
Mar 13 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 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
用来解析.htgroup文件的PHP类
2012/09/05 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php实现删除空目录的方法
2015/03/16 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
DOM 高级编程
2015/05/06 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
python实现多线程抓取知乎用户
2016/12/12 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
学年自我鉴定范文
2013/10/01 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
出差报告怎么写
2014/11/06 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
婚礼答谢词范文
2015/09/29 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python