JS高级学习笔记(7)- 通俗易懂来解释——继承
时间:2019-03-19
本文章向大家介绍JS高级学习笔记(7)- 通俗易懂来解释——继承,主要包括JS高级学习笔记(7)- 通俗易懂来解释——继承使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我的笔记
JS没有“子类”和“父类”的概念,靠“原型链”(prototype chain)实现继承,这就不是很好理解了。
JS原来是为了验证表单而设计的,不用像java、C++一样面向对象,如果引入“类”的概念,js就是一门完整的面向对象的语言了。在JS中,所有数据类型都是对象,这和java非常相似。
在C++ 和 java中,创建对象时,使用new关键字,都会调用“类”的构造函数(constructor),在js中,直接在new后面跟着构造函数。
如下:
function DOG(name) { this.name = name; } var dagA = new DOG('大毛'); alert(dogA.name); // 大毛 注意:this指向实例
使用构造函数生成实例对象,有一个缺点,那就是无法共享数据。
比如,在DOG对象的构造函数中,设置一个实例对象的公有属性species。
function DOG(name){ this.name = name; this.species = '犬科'; } // 如果生成俩个实例对象 var dogA = new DOG('大毛'); var dogB = new DOG('二毛');
这俩个对象的species属性是独立的,修改其中一个,不会影响到另一个。
dogA.species = '猫科'; alert(dogB.species); // 显示"犬科",不受dogA的影响
每一个实例对象,都有自己的属性和方法的副本。这不仅无法做到数据共享,也是极大的资源浪费。
prototype属性的引入
prototype是构造函数的一个属性,所有实例对象需要共享的属性和方法,都放在这个对象里面,那些不需要的共享的属性和方法,就放在构造函数里面。
实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分为俩种,一种是本地的,另一种是引用过来的。
demo1:
function DOG(name){ this.name = name; } DOG.prototype = { species : '犬科' }; var dogA = new DOG('大毛'); var dogB = new DOG('二毛'); alert(dogA.species); // 犬科 alert(dogB.species); // 犬科
现在,将species放在prototype对象里,只要修改了prototype对象,就会同时影响到俩个实例对象
DOG.prototype.species = '猫科'; alert(dogA.species); // 猫科 alert(dogB.species); // 猫科
prototype对象是实例对象的原型,而实例对象则"继承"了prototype对象。
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
- 使用动态语言来制作silverlight
- 《资讯》霍金:人工智能的威胁就像核武器,世界将发生10大变化!
- [原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
- 厉害了,连美图CEO都开始热捧区块链了!
- Silverlight制作逐帧动画
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
- 糟糕了!这次新版微信,要干死所有小游戏了!
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构
- 除了奇奇怪怪的机器人们,2017年人工智能还干了哪些“蠢事”?
- 区块链搬砖的坑及有效鉴别方法
- 英伟达回应禁令:研究人员放心用不更新驱动就没影响
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java多线程-7】阅尽Java千般锁
- 【SpringBoot注解-2】AOP相关注解详解
- 【SpringBoot注解-3】Bean注入相关注解
- 【SpringBoot注解-4】:@Target、@Retention、@Documented注解简介
- 【Linux系列-1】top命令详解
- 【Linux系列-2】iostat命令详解
- 【Mybatis-1】MyBatis注解版详解
- 【MyBatis-2】MyBatis之xml 配置版
- 【MyBatis-3】MyBatis xml映射文件详解
- 【剑指Offer】II-数组中数字出现的次数 II
- 【MyBatis-4】MyBatis之动态SQL
- 【MyBatis-4】MyBatis批量insert、update、delete数据
- 【redis6.0.6】深入源码,一探究竟 -- redis服务器开机自启动
- 不是你记忆中的单例模式,但适用的程度,更胜一筹
- 安卓模拟器修改hosts文件