zoukankan      html  css  js  c++  java
  • 继承

    什么是原型链

    ECMAScript中,每个由构造器创建的对象都拥有一个指向构造器prototype属性值的隐式引用,这个引用称为原型(prototype)。

    每个原型也可以拥有指向自己原型的隐式引用(即该原型的原型),如此下去,就是所谓的原型链(prototype chain),在具体的语言实现中,每个对象都有一个__proto__属性来实现对原型的隐式引用。

    理解了原型链,便可以实现继承。ECMAScript规定,当要给某个对象的属性赋值时,解释器会查找该对象原型链中第一个含有该属性的对象(原型本身就是一个对象,那么原型链即为一组对象的链。对象的原型链中的第一个对象是该对象本身)。如果要获取某个对象属性的值,解释器会返回该对象原型链中首先具有该属性的对象属性值。如图:

    原型链中的属性隐藏机制

    图中,object1、prototype1、prototype2构成了对象object1的原型链。因为在object1中已经找到了prototype4属性,所以prototype1的prototype4属性被隐藏。同理,在prototype1中找到了prototype3属性,所以prototype2中的prototype3属性也被隐藏。

    利用原型链实现继承
    //声明Animal对象构造器
    function Animal () {};
    //将Animal的prototype属性指向一个对象;
    //亦可以理解为指定Animal对象的原型
    Animal.prototype={
        name:"mengmeng",
        weight:200,
        eat:function(){
            alert("动物");
        }
    }
    //声明Mammal对象构造器
    function Mammal () {
        this.name = "哺乳动物";
    }
    //指定Mammal对象的原型为一个Animal对象。
    //实际上此处便是在创建Mammal对象和Animal对象之间的原型链
    Mammal.prototype = new Animal();
    //声明Horse对象构造器
    function Horse (height,weight) {
        this.name = "horse";
        this.height = height;
        this.weight = weight;
    }
    //将Horse对象的原型指定为一个Mammal对象,继续构建Horse与Mammal之间的原型链
    Horse.prototype = new Mammal();
    //重新指定eat方法,此方法将覆盖从Animal原型继承来的eat方法
    Horse.prototype.eat=function () {
        alert("马");
    }
    var horse = new Horse(100,300);
    horse.eat();//
    alert(horse.__proto__ == Horse.prototype);//true
    alert(horse.prototype.__proto__ == Mammal.prototype);//true
    alert(Mammal.prototype.__proto__ == Animal.prototype);//true

    参考文章:http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/

  • 相关阅读:
    springBoot(3)---目录结构,文件上传
    springBoot(2)---快速创建项目,初解jackson
    VueJs(14)---理解Vuex
    VueJs(13)---过滤器
    VueJs(12)---vue-router(导航守卫,路由元信息,获取数据)
    php多进程中的阻塞与非阻塞
    php 中的信号处理
    dede中arcurl的解析
    dede5.7 GBK 在php5.4环境下 后台编辑器无法显示文章内容
    php5.3 php-fpm 开启 关闭 重启
  • 原文地址:https://www.cnblogs.com/dragonwave/p/4740015.html
Copyright © 2011-2022 走看看