初探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 相关文章推荐
常用js脚本
Dec 03 Javascript
最简单的jQuery程序 入门者学习
Jul 09 Javascript
完美解决IE低版本不支持call与apply的问题
Dec 05 Javascript
JS验证邮箱格式是否正确的代码
Dec 05 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 Javascript
JavaScript实现简单的树形菜单效果
Jun 23 Javascript
weebox弹出窗口不居中显示的解决方法
Nov 27 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 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制作动态随机验证码
2015/02/12 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python比较两个图片相似度的方法
2015/03/13 Python
python实现用户管理系统
2018/01/10 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python线程中的同步问题及解决方法
2019/08/29 Python
Python partial函数原理及用法解析
2019/12/11 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
升职自荐书范文
2013/11/28 职场文书
人力资源部岗位职责
2015/02/11 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript