成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript 繼承

鄒立鵬 / 2554人閱讀

摘要:重新掛載原型將之前的原型合并進(jìn)去調(diào)用父類方法調(diào)用父類構(gòu)造函數(shù)

var es = {};

es.extend = function(dist, src) {
  for (var k in src) {
    if (src.hasOwnProperty(k)) {
      dist[k] = src[k];
    }
  }
};

es.inherit = function(Klass, Base) {
  function f() {}
  f.prototype = Base.prototype;
  Klass.prototype = new f;
  Klass.prototype.constructor = Klass;
  Klass.Base = Base;
};

es.create = function(oo) {
  var Klass = oo.init;

  function realBase(fn) {
    var count = 0;
    function realBase() {
      var Base = Klass.Base, i = 0;
      while(count !== i) {
        Base = Base.Base;
        i++;
      }
      count++;
      fn.call(this, Base, arguments);
      count--;
    }
    return realBase;
  }


  oo.Base = realBase(function(Base, argv) {
    Base.apply(this, argv);
  });

  oo.oo = realBase(function(Base, argv) {
    Base.prototype[argv[0]].apply(this, [].slice.call(argv, 1));
  });


  Klass.prototype = oo;

  Klass.extend = function(Base) {
    var Klass = this;
    var old = Klass.prototype;
    es.inherit(Klass, Base);//Klass重新掛載原型
    es.extend(Klass.prototype, old); //將之前的原型合并進(jìn)去
    return Klass;
  };
  
  return Klass;
};



/////////////////////test////////////////

var People = es.create({
  init: function(name) {
    this.name = name;
  },
  intro: function() {
    console.log("I am " + this.name);
  }
});

var Student = es.create({
  intro: function() {
    this.oo("intro");//調(diào)用父類方法
    console.log("I am learning " + this.lesson);
  },
  init: function(name, lesson) {
    this.Base(name);
    this.lesson = lesson;
  }
}).extend(People);



var Son = es.create({
  init: function(name, lesson, age) {
    this.Base(name, lesson);//調(diào)用父類構(gòu)造函數(shù)
    this.age = age;
  },
  intro: function() {
    this.oo("intro");
    console.log("I am " + this.age + " years old");
  }
}).extend(Student);



var p = new People("eric");
p.intro();

var s = new Student("eric", "js")
s.intro();

var son = new Son("eric", "js", 34);
son.intro();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78772.html

相關(guān)文章

  • 徹底搞懂JavaScript中的繼承

    摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實(shí)現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實(shí)例對(duì)象 要搞清楚如何在JavaScript中實(shí)現(xiàn)繼承,...

    _ivan 評(píng)論0 收藏0
  • 講清楚之 javascript 對(duì)象繼承

    摘要:中的繼承并不是明確規(guī)定的,而是通過模仿實(shí)現(xiàn)的。繼承中的繼承又稱模擬類繼承。將函數(shù)抽離到全局對(duì)象中,函數(shù)內(nèi)部直接通過作用域鏈查找函數(shù)。這種范式編程是基于作用域鏈,與前面講的繼承是基于原型鏈的本質(zhì)區(qū)別是屬性查找方式的不同。 這一節(jié)梳理對(duì)象的繼承。 我們主要使用繼承來實(shí)現(xiàn)代碼的抽象和代碼的復(fù)用,在應(yīng)用層實(shí)現(xiàn)功能的封裝。 javascript 的對(duì)象繼承方式真的是百花齊放,屬性繼承、原型繼承、...

    Jonathan Shieber 評(píng)論0 收藏0
  • javascript繼承 --- 多種繼承方式解析(ES5)

    摘要:繼承前言作為一門輕量級(jí)的腳本語言在和的橫空出世之后將其推向的新的高度雖然中出現(xiàn)的新的生成對(duì)象的類語法格式但依然為的語法糖而我們依然有必要從的原生實(shí)現(xiàn)入手來了解它的繼承實(shí)現(xiàn)方式給出了更加簡潔的固定的類聲明方式有興趣的可以查看阮一峰的入門下面給 javascript繼承 前言 javascript作為一門輕量級(jí)的腳本語言在ES6和node.js的橫空出世之后將其推向的新的高度,雖然 ES6...

    yankeys 評(píng)論0 收藏0
  • 白話解釋 Javascript 原型繼承(prototype inheritance)

    摘要:我們有了構(gòu)造函數(shù)之后,第二步開始使用它構(gòu)造一個(gè)函數(shù)。來個(gè)例子這種方式很簡單也很直接,你在構(gòu)造函數(shù)的原型上定義方法,那么用該構(gòu)造函數(shù)實(shí)例化出來的對(duì)象都可以通過原型繼承鏈訪問到定義在構(gòu)造函數(shù)原型上的方法。 來源: 個(gè)人博客 白話解釋 Javascript 原型繼承(prototype inheritance) 什么是繼承? 學(xué)過面向?qū)ο蟮耐瑢W(xué)們是否還記得,老師整天掛在嘴邊的面向?qū)ο笕筇?..

    kid143 評(píng)論0 收藏0
  • javascript繼承你了解多少?

    摘要:和構(gòu)造函數(shù)前面提到,是個(gè)內(nèi)置隱藏屬性,雖然在可以通過訪問,但是其設(shè)計(jì)本意是不可被讀取和修改的,那么我們?nèi)绾卫迷玩渷斫⒗^承關(guān)系提供了關(guān)鍵字。到這兒,思路就清晰了,怎么讓對(duì)象和對(duì)象的相連實(shí)現(xiàn)繼承只需把的構(gòu)造函數(shù)的連接到就行了。 什么是繼承? 大多數(shù)人使用繼承不外乎是為了獲得這兩點(diǎn)好處,代碼的抽象和代碼的復(fù)用。代碼的抽象就不用說了,交通工具和汽車這類的例子數(shù)不勝數(shù),在傳統(tǒng)的OO語言中(...

    baishancloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<