初探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 入门基础知识 想学习js的朋友可以参考下
Dec 26 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
Jan 13 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
解决vue-cli + webpack 新建项目出错的问题
Mar 20 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
玩转vue的slot内容分发
Sep 22 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 Javascript
React列表栏及购物车组件使用详解
Jun 28 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
模仿OSO的论坛(三)
2006/10/09 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
javascript 模拟点击广告
2010/01/02 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
在python中的socket模块使用代理实例
2014/05/29 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
python如何实现视频转代码视频
2019/06/17 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python如何输出整数
2020/06/07 Python
python实现移动木板小游戏
2020/10/09 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
酒店个人求职信范文
2014/01/25 职场文书
公司门卫管理制度
2014/02/01 职场文书
给客户的检讨书
2014/12/21 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python