• javascript原型和原型继承


    每一个javascript对象(null除外)都和原型对象相关联,每一个对象都从原型对象继承属性。

    所有通过对象直接量创建的对象都具有同一个原型对象,并可以通过javascript代码Object.prototype获得对原型对象的引用。通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。因此,同使用{}创建对象一样,通过new Object()创建的对象也继承自Object.prototype。同样,通过new Array()创建的对象的原型就是Array.prototype,通过new Date()创建的对象的原型就是Date.prototype。

    首先,我们来了解一下Object.create方法。

    ECMAScript5定义了一个名为Object.create()的方法,它创建一个新对象,其中第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述。使用它很简单,直接传入所需的原型对象即可。

    例如:

    var o1 = Object.create({a:1, b:2});  //o1继承了属性x和y

    var o2 = {x:10, y:20};

    var o3 = Object.create(o2);  //o3继承了o2

    如果想创建一个普通的空对象(比如通过{}或者new Object()创建的对象),需要传入Object.prototype,例如:

    var o4 = Object.create(Object.prototype);  //o4跟{}和new Object()一样

    使用Object.create方法可以通过任意原型对象创建新对象,也即可以使任意对象可继承。因此,我们可以写一个原型继承函数,如下:

    function inherit(p){

      if(Object.create){

        return Object.create(p);

      }else{

        function f(){}

        f.prototype = p;

        return new f();

      }

    }

    接着,我们来看看javascript对象的继承。

    javascript对象具有"自有属性",也有一些属性是从原型对象继承而来的。假设要查询对象o的属性x,如果o中不存在x,那么将会继续在o的原型对象中查询属性x。如果原型对象中也没有x,但这个原型也有原型,那么继续在这个原型对象的原型上执行查询,知道找到x或者查找到一个原型是null的对象为止。可以看到,对象的原型属性构成了一个"链",通过这个"链"可以实现属性的继承。

    例如:

    var o = {};  //o从Object.prototype继承对象的方法

    o.x = 1;

    var p = inherit(o);  //p继承o和Object.prototype

    p.y = 2;

    var q = inherit(p);  //q继承p、o和Object.Prototype

    q.z = 3;

    q.x + q.y  //3:x和y分别继承自o和p 

  • 相关阅读:
    Quartz.Net系列(二):介绍、简单使用、对比Windows计划任务
    Quartz.Net系列(一):Windows任务计划程序
    Linux下swap到底有没有必要使用
    Linux服务器有大量的TIME_WAIT状态
    HTTP请求头中的X-Forwarded-For介绍
    Keepalived实现服务高可用
    Gitlab常规操作
    Git 常用命令
    HTTP常见状态码
    《Docker从入门到跑路》之多阶段构建
  • 原文地址:https://www.cnblogs.com/ArthurPatten/p/3505916.html
Copyright © 2020-2023  润新知