初探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 相关文章推荐
最新28个很棒的jQuery 教程
May 28 Javascript
JavaScript实现网站访问次数统计代码
Aug 12 Javascript
Bootstrap源码解读导航条(7)
Dec 23 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
vue路由权限校验功能的实现代码
Jun 07 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 Javascript
JavaScript中遍历的十种方法总结
Dec 15 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安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
js 表单验证方法(实用)
2009/04/28 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
python读写文件操作示例程序
2013/12/02 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
大学毕业自我评价
2014/02/02 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
ktv筹备计划书
2014/05/03 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
《称赞》教学反思
2016/02/17 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
导游词之峨眉山
2019/12/16 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL