初探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 相关文章推荐
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
jqgrid 简单学习笔记
May 03 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
创建简单的node服务器实例(分享)
Jun 23 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
Vue.js仿微信聊天窗口展示组件功能
Aug 11 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
Oct 17 Javascript
在iFrame子页面里实现模态框的方法
Aug 17 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
May 15 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
May 25 Javascript
JavaScript 对象创建的3种方法
Nov 17 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 form 表单传参明细研究
2009/07/17 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Python的pycurl包用法简介
2015/11/13 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Python类装饰器实现方法详解
2018/12/21 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
网页设计个人找工作求职信
2013/11/28 职场文书
超级搞笑检讨书
2014/01/15 职场文书
实验教师岗位职责
2014/02/13 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
中央空调节能方案
2014/06/15 职场文书
公司收款委托书范本
2014/09/20 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
Python MNIST手写体识别详解与试练
2021/11/07 Python