//js中实现继承的几种方式
//实现继承首先要有一个父类,先创造一个动物的父类
function Animal(name){
this.name = name;
this.shoot = function(){
console.log("yelp");
}
}
//动物的原型
Animal.prototype.eat = function(food){
 
console.log(name+"吃"+food);
}
//1.实例继承
var dog = new Animal("大黄");
// console.log(dog.name);
// dog.eat("骨头");
//用父类的构造函数实例化出来的实例对象就继承了父类的属性和方法
//缺点:
//2.上下文继承,改变this的指向
function Dog(name){
Animal.call(this);
this.name = name;
}
var dog = new Dog("rose");
//dog.shoot();
//console.log(dog.name);
// dog.eat("fish");//报错,不能继承原型方法
//使用上下文的方法,改变this的指向,让Dog拥有Animal的属性
//缺点:只能继承父类的实例属性和方法,不能继承父类的原型属性和方法
//3.遍历继承
/* var cat = {};
var a = new Animal("jj");
cat.prototype.lookhome = function(){
console.log("lookhome");
}
for(var key in a){
cat[key]=a[key];
}
cat.lookhome();
console.log(cat.name);
cat.shoot();
cat.eat("fish");*/
//使用循环遍历的方法,把Animal的属性赋给cat,这样cat就拥有了Animal的属性和方法
//4.原型链继承
/* function Cat(name){
this.name = name;
}
Cat.prototype = new Animal();
var cat = new Cat("kitty");
cat.shoot();
cat.eat("meat");//吃meat,没有名字,不能给父类的构造函数传参
console.log(cat.name);*/
//把父类的实例赋给子类的原型,这样子类实例化出来的实例就拥有了父类的属性和方法
//缺点:不能向父类的构造函数传参,
//5.混合继承
/* function Cat(name){
Animal.call(this);
this.name = name;
}
Cat.prototype = new Animal();
Cat.prototype.lookhome=function(){
console.log("lookhome");
}
var cat = new Cat("kitty");
cat.eat("fish");
cat.shoot();
cat.lookhome();
console.log(cat.name);*/
//结合上下文和原型链继承,让子类拥有父类的属性和方法,也拥有原型方法
//缺点:如果要给子类添加自己的原型属性和方法,必须放在继承父类属性的后面,放在继承之前会
//被覆盖
//6.另一种方式实现继承
/* function Cat(){
this.sleep = function(){
console.log("cat sleep");
}
}
Cat.prototype.lookhome = function(){
console.log("lookhome");
}
Cat.prototype.__proto__ = new Animal();
 
var cat = new Cat();
cat.eat("fish");
cat.sleep();
cat.lookhome();*/
//每一个对象都有一个__proto__的属性,通过父类的构造函数的原型的__proto__属性,继承父类的属性和方法,这样不会覆盖自己的原型方法

js 实现继承的几种方式的更多相关文章

  1. js实现继承的5种方式 (笔记)

    js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...

  2. js 实现继承的6种方式(逐渐优化)

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  3. js实现继承的两种方式

    这是面试时面试官会经常问到问题: js的继承方式大致可分为两种:对象冒充和原型方式: 一.先说对象冒充,又可分为3种:临时属性方式.call().apply(): 1.临时属性方式: 当构造对象son ...

  4. js实现继承的5种方式

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...

  5. 深入浅出js实现继承的7种方式

    给大家介绍7中js继承的方法 有些人认为JavaScript并不是真正的面向对象语言,在经典的面向对象语言中,您可能倾向于定义类对象,然后您可以简单地定义哪些类继承哪些类(参考C++ inherita ...

  6. JS实现继承的几种方式

    前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如下: // 定义一个 ...

  7. JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式

      前  言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...

  8. JS 面向对象 ~ 继承的7种方式

    前言: 继承 是 OO 语言中的一个最为人津津乐道的概念.许多 OO 语言都支持两种继承方式:接口继承 和 实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在 ...

  9. JS实现继承的几种方式(转)

    转自:幻天芒的博客 前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如 ...

随机推荐

  1. p3295 [SCOI2016]萌萌哒

    传送门 分析 我们可以将一个点拆成logN个点,分别代表从点i开始,长度为2^k的子串 那么当我们处理两个区间相等的关系时,对区间做二进制拆分,拆成log个区间,分别并起来即可 当然我们这样做修改是省 ...

  2. p2234&bzoj1588 营业额统计

    传送门 题目 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...

  3. 《Maven实战》笔记-6-maven测试

    一.基于Maven的测试 1.maven-surefire-plugin插件 该插件的test目标会自动执行测试源码路径(默认src/test/java)下符合以下命名模式的测试类: 以Test开头或 ...

  4. Struts2 引入

    引入:   说:如果一个路径想访问一个类,需求怎么做? 第一种方法,用servlet 第二种方法,用过滤器 第三种方法如下图:把路径和方法都存到map里面,用反射可以执行类下的方法     第三中方法 ...

  5. javax.servlet.ServletConfig接口(五)

    主要作用是保存web.xml文件里面的配置信息 一个servlet对应一个ServletConfig,100个servlet对应100个ServletConfig.   代码如下(单个获取和获取所有) ...

  6. CSS预处理器(SASS和LESS)

    Sass框架应用Sass简介 Sass又名SCSS,是CSS预处理器之一,它能让你更好更轻松的工作.Sass官网是这样描述Sass的:**Sass是一门高于CSS的元语言,能用来清晰的.结构化地描述文 ...

  7. 解读人:陈秋实,SP2: Rapid and Automatable Contaminant Removal from Peptide Samples for Proteomic Analyses(标准操作流程2:如何在蛋白质组学分析中快速和自动的去除肽段样品中的污染物)

    发表时间:2019年4月 IF:3.950 单位: 威斯康星医学院生物化学系 威斯康星医学院生物医学质谱研究中心 物种:人(人体肾脏细胞和蛋白) 技术:肽段清理 一. 概述:(用精炼的语言描述文章的整 ...

  8. 安装maven时遇到的问题

    配置好环境变量和本地仓库后,在命令行里输入mvn compile,可以显示成功,但是mvn install后就一直失败.显示如下错误: 在idea中显示如下错误: 其实即使显示编译成功,但并没有真正的 ...

  9. Eclipse导入GitHub项目两处报错处理

    1.项目出现Could not calculate build plan:pligin 错误解决办法: 删除本地.m2仓库中 org.apache.maven.plugins:maven-resour ...

  10. ssh免密登录linux服务器

    Ssh免密登录 sshd服务 sshd简介: SSH 密钥为登录 Linux 服务器提供了更好且安全的机制.运行 ssh-keygen 后,将会生成公私密钥对.你可以将公钥放置到任意服务器,从持有私钥 ...