依旧是恶补js基础,上代码:

1、定义父类及父类方法

function Animal(){
this.name = "动物";
} Animal.prototype.eat = function(food){
alert('eat ' + food);
}

2、定义子类

function Ferret(){
this.name = "雪貂";
  //this.type = "leixing";//此处,如果定义了type,会覆盖下面prototype.type的“domestic”
  //说明一个机制,调用Ferret().type的时候,先寻找对象自有属性,再查找原型链内属性
}

3、原型链继承核心

function fn(){
//中间函数,防止每次创建对象都要new
}
//父类的属性与方法通过prototype传递给中间函数
fn.prototype = Animal.prototype;
//中间函数的实例将父类的属性与方法传递给子类的prototype
Ferret.prototype = new fn();

4、扩展子类

//为所有Ferret实例定义type属性
Ferret.prototype.type = "domestic"; Ferret.prototype.eat = function(food){ //子类执行父类的方法
Animal.prototype.eat.call(this,food); //子类的扩展逻辑
alert(this.type + ' eat ' + food); }

5、测试继承结果

var animal = new Animal();
var ferret = new Ferret();

animal instanceof Animal // true
animal instanceof Ferret // false
ferret instanceof Ferret // true
ferret instanceof Animal // true 此处,子类是父类的实例为true,说明继承成功~
ferret.eat('meat');//1、alert(eat meat); 2、alert(domestic eat meat);

以下是一些啰嗦:

var a = { a: 'b', c: 'd' };

function a1(){
  this.a = 'b';
  this.c = 'd';
} a instanceof Object // true
a1 instanceof Object // true

由此可以看出,a与a1均属于对象,那么,有什么区别呢

a.prototype == undifiend // true
a1.prototype == undefined // false typeof a == "object" // true
typeof a1 == "function" // true Object.keys(a) // ["a", "c"]
Object.keys(a1) // []

a仅仅是一个单纯的key&value,没有构造函数,属于【引用类型】

而a1则有prototype,可以实现继承,通过Object.keys()可以看出,a1身为一个Object,不存在key&value,属于【值类型】

V8中的继承:

function Animal(){}
function Ferret(){}
Ferret.prototype.__proto__ = Animal.prototype// 父类将属性传递给子类

prototype原型链继承的更多相关文章

  1. 原型链继承中的prototype、__proto__和constructor的关系

    前不久写了有关原型链中prototype.__proto__和constructor的关系的理解,这篇文章说说在原型链继承中的prototype.__proto__和constructor的关系. 通 ...

  2. 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)

    上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...

  3. javascript中继承(一)-----原型链继承的个人理解

    [寒暄]好久没有更新博客了,说来话长,因为我下定决心要从一个后台程序员转为Front End,其间走过了一段漫长而艰辛的时光,今天跟大家分享下自己对javascript中原型链继承的理解. 总的说来, ...

  4. javascript原型链继承

    一.关于javascript原型的基本概念: prototype属性:每个函数都一个prototype属性,这个属性指向函数的原型对象.原型对象主要用于共享实例中所包含的的属性和方法. constru ...

  5. js继承之组合继承(结合原型链继承 和 借用构造函数继承)

    在我的前两篇文章中,我们已经介绍了 js 中实现继承的两种模式:原型链继承和借用构造函数继承.这两种模式都存在各自的缺点,所以,我们考虑是否能将这二者结合到一起,从而发挥二者之长.即在继承过程中,既可 ...

  6. js重点--原型链继承详解

    上篇说过了关于原型链继承的问题,这篇详解一下. 1. function animals(){ this.type = "animals"; } animals.prototype. ...

  7. js原型链+继承 浅析

    名称:    prototype--原型对象    __proto__--属性 原型链与继承网上搜索定义,看起来挺绕的 .先说继承: 所有的对象实例都可以共享原型对象包含的属性和方法  例如一个实例A ...

  8. Javascript 组合继承 原型链继承 寄生继承

    Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["re ...

  9. 三张图搞懂JavaScript的原型对象与原型链 / js继承,各种继承的优缺点(原型链继承,组合继承,寄生组合继承)

    摘自:https://www.cnblogs.com/shuiyi/p/5305435.html 对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__pro ...

随机推荐

  1. spoj 7258 SUBLEX(SAM,名次)

    [题目链接] http://www.spoj.com/problems/SUBLEX/en/ [题意] 给定一个字符串,询问次序为k的子串. [思路] SAM,名次 建好SAM后求出每个结点根据tra ...

  2. 如何禁止掉SharePoint页面个性化(网站操作-编辑页面)

    使用SharePoint Designer打开,或者创建一个新的Master Page,找到SPWebPartManager控件,如下所示,修改它的属性“Personalization-Enabled ...

  3. 8-12-COMPETITION

    链接:最短路 A.HDU 2544    最短路 算是最基础的题目了吧.............我采用的是Dijkstra算法....... 代码: #include <iostream> ...

  4. fedora21安装xmind7

    老版本的xmind安装方法,在最后的阶段无法成功注册到系统中,desktop无法自定义完成.参考:http://www.cnblogs.com/cupcoffee/p/3560626.html 直到从 ...

  5. ibm rational software architect download

    keep secret: rational software architect download: http://public.dhe.ibm.com/software/rationalsdp/v8 ...

  6. IOS tableView 自定义cell 多行时 文字重复现象

    今天写了一个demo,有一个问题,有很多cell,但是超过一页后往下翻,发现文字有重叠现象, cell用的是重用机制,按说不会这样,最终解决的方案: 勾选这个,clears graphics cont ...

  7. c#中cookies的存取操作

    在客户端创建一个username的cookies,其值为gjy,有效期为1天. 方法1: Response.Cookies["username"].Value="zxf& ...

  8. hdu4462 Scaring the Birds

    Scaring the Birds Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. vs2010突然变慢解决方法

    方法一: 开始>>运行>>devenv.exe /resetuserdata

  10. Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)

    public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpSer ...