初探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 相关文章推荐
Javascript 复制数组实现代码
Nov 26 Javascript
Dojo 学习要点
Sep 03 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
Mar 25 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
JavaScript订单操作小程序完整版
Jun 23 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
layui使用label标签的方法
Sep 14 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
GD输出汉字的函数的分析
2006/10/09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
浅谈php调用python文件
2019/03/29 PHP
javascript处理table表格的代码
2010/12/06 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Python根据区号生成手机号码的方法
2015/07/08 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
python文字转语音实现过程解析
2019/11/12 Python
Python print不能立即打印的解决方式
2020/02/19 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
退休教师欢送会主持词
2014/03/31 职场文书
企业法人授权委托书
2014/09/25 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
2015年读书月活动总结
2015/03/26 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
葬礼主持词
2015/07/02 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers