zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/ArthurPatten/p/3505916.html
Copyright © 2011-2022 走看看