js面向对象3-继承
一、了解继承
首先我们一起了解下js中继承,其实继承就是后辈继承前辈的属性和方法。
二、继承的方法
- 从父类继承属性和方法
这是对象冒充的方法,模仿java的继承方法。实现的原理是,通过改变父类的执行环境(也就是this指向子类)进行继承;
// 从父类中继承属性和方法
function Father() {
this.say = 'hi';
this.fn = function () {
return this.say;
}
}
function Son() {
this.name = "a";
//这一条把Father当中了普通的函数,变量赋值给了Son的f属性。其实得到的是Father函数的指针。
//需要注意的是,函数中的this,是谁调用指向谁。此时Father函数内的this指向了子类Son
this.f = Father;
/*继承的关键代码。等价于Father(),得到的结果将会有两个:
1. say="hi" 2. fn=function(){return this.say;}。
从而实现了Son继承Father属性和方法的功能。从而实现了Son继承Father属性和方法的功能。
*/
this.f();
//删除这个指针链接。为了避免后续修改对Father构造函数造成影响
delete this.f;
}
var s = new Son();
//打印结果是"hi"。Son中存在了Father的方法fn,return了say属性。
console.log(s.fn());
console.log(s);
继承效果展示:
通多console.log(s); 打印结果,即实例s,可以看出子类的继承效果,子类Son继承了父类Father的属性say和方法fn。

2 通过原型链继承
原型链的查找顺序: 先自身查找, 找到就结束, 没有找到就沿着原型链向上查找, 直到找到Object.prototype.proto
function A() {
this.a = "A";
this.fn = function () {
return this.a;
}
}
function B() {
this.a = "B";
}
B.prototype = new A(); //将构造函数A的实例作为B的原型,原来存在于A实例的所有方法和属性,存在于B原型prototype中
var b = new B(); //创建一个构造函数B的实例
console.dir(b);//结果如下图
通过dir方法可以查看到b的实例所有属性和方法。
b实例不但拥有构造函数B的属性a="B",还继承了构造函数A的属性a="A"和方法fn();
并且constructor指向的是构造函数A。

3 class继承extends
class C {
constructor(name) {
//构造函数
this.name = name; //给新的对象添加一个name属性
}
// sayName相当于 A.prototype.sayName = function(){return this.name}
sayName() {
return this.name;
}
}
class D extends C { //D类,该类通过extends关键字,继承了C类的所有属性和方法
}
var newc = new D("haode");
//通过打印结果可以看出,实例继承了C类的属性和方法
console.log(newc.name); //"haode"
console.log(newc.sayName()); //"haode"
js面向对象3-继承的更多相关文章
- js面向对象之继承那点事儿根本就不是事
继承 说道这个继承,了解object-oriented的朋友都知道,大多oo语言都有两种,一种是接口继承(只继承方法签名):一种是实现继承(继承实际的方法) 奈何js中没有签名,因而只有实现继承,而且 ...
- 捋一捋js面向对象的继承问题
说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装.继承和多态的一种编程思想罢了.今天我们就来说一下这其中继承的问 ...
- JS面向对象组件 -- 继承的其他方式(类式继承、原型继承)
继承的其他形式: •类式继承:利用构造函数(类)继承的方式 •原型继承:借助原型来实现对象继承对象 类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 要做属性和方法继承的时候,要分开继 ...
- JS——面向对象、继承
创建对象的方式: 1)单体 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- JS 面向对象之继承 -- 原型链
ECMAScript只支持实现继承,其实现继承主要是靠原型链来实现. 原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾下构造函数.原型和实例的关系: 每个构造函数都有 ...
- js面向对象之继承-原型继承
//animal 父类 超类 var Animal = function(name) { this.name = name; this.sayhello = function() { alert(&q ...
- JS 面向对象之继承---多种组合继承
1. 组合继承:又叫伪经典继承,是指将原型链和借用构造函数技术组合在一块的一种继承方式. 下面来看一个例子: function SuperType(name) { this.name = name; ...
- Js面向对象构造函数继承
构造函数继承 <!-- 创建构造函数 --> function Animal(){ this.species= '动物'; } function Dog(name,color){ this ...
- JS面向对象(封装,继承)
在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来 ...
- JS面向对象笔记二
菜单导航,<JS面向对象笔记一>, 参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...
随机推荐
- 介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用
首先介绍一下链接库:链接库分为动态链接库和静态链接库两种 LIB是静态链接库,在程序编译连接的时候是静态链接,其相应的文件格式是.lib. 即当程序採用静态链接库的时候..lib文件里的函数被链接到终 ...
- 设计模式之Flyweight模式(笔记)
享元模式:运用共享技术有效地支持大量细粒度的对象. 适用场合:假设一个应用程序适用了大量的对象.而大量的这些对象造成了非常大的存储开销时就应该考虑使用. 首先定义一个IFlyweight接口 publ ...
- PHP长整型在32位系统中强制转化溢出
CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机 ...
- url与图片
http://restapi.amap.com/v3/staticmap?location=116.481485,39.990464&zoom=10&size=750*300& ...
- 11.ng-init
转自:https://www.cnblogs.com/best/tag/Angular/ 初始化 <p ng-init="test=1" ng-repeat="a ...
- BZOJ 1012 单调队列+二分
思路: 维护一个单减的序列 序号是单增的 每回二分查找第一个比询问的大的值 我手懒 用得lower_bound //By SiriusRen #include <cstdio> #incl ...
- Red Hat Linux 安装 (本地、网络安装)
Red Hat Linux 安装 (本地.网络安装) 650) this.width=650;" onclick='window.open("http://blog.51cto.c ...
- C++实现矩阵求逆
最近实现一个算法要用到求逆等矩阵运算,在网上搜到一个别人写的矩阵类,试了一下效果不错,贴在这里,做个保存. matrix.h文件: #ifndef __MATRIX_H__ #define __MAT ...
- power design设计数据库
power design是收费软件 大致设计流程: 画出概念数据模型,添加实体,连接实体间关系 生成物理数据模型,可以继续在此基础上修改 生成数据库脚本(一个.sql文件),文件中前面是删除表,后面是 ...
- boost::asio与ACE的对比
http://blog.163.com/miky_sun/blog/static/3369405201041753652505/