<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Javascript 面向對象編程

    時間:2024-11-04 19:38:04 JavaScript 我要投稿
    • 相關推薦

    Javascript 面向對象編程

      很長一段時間以來(這里本人要幸災樂禍地說),js是“一種點綴的作用,完成很有限的功能,諸如表單驗證之類,其語言本身也一直被當作過程化的語言使用,很難完成復雜的功能。”。但是(這里本人要苦大仇深、痛心疾首地說),“而Ajax的出現使得復雜腳本成為必需的組成部分,這就對 JavaScript 程序設計提出了新的要求,很多Ajax應用開始利用JavaScript面向對象的性質進行開發,使邏輯更加清晰。事實上,JavaScript 提供了完善的機制來實現面向對象的開發思想。”。

      這里關于對象就廢話這么多了。我們都知道面向對象編程的三個主要特點是:封裝、繼承和多態。下面就圍繞著這三個特點,記錄一些學習心得。

      好的,先從封裝性開始介紹,眾所周知,對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。Code is cheap.來看簡單的代碼:

      // 定義函數的方式定義類

      function class1() {

      // 類成員的定義及構造函數

      // 這里class1 既是一個函數也是一個類。作為函數,它可以理解為類的構造函數, 負責初始化的工作。

      }

      // 使用new操作符獲得一個類的實例

      var obj = new class1();

      /* 拋開類的概念,從代碼的形式上來看,class1 就是一個函數,那么是不是所有的函數都可以用new來操作呢?答案是肯定的。

      在JavaScript 中,函數和類就是一個概念,當new 一個函數時,就會返回一個對象。如果這個函數中沒有初始化類成員,那就會返回一個空的對象。

      事實上,當new一個函數時,這個函數就是所代表類的構造函數,其中的所有代碼都可以看作為了初始化一個對象而工作。用于表示類的函數也稱之為構造器。

      在JavaScript 中,每個對象可以看作是多個屬性(方法)的集合

      */

      function test() {

      alert( typeof (obj));

      }

      上面的代碼定義了一個類class1,這就是js中簡單的封裝,下面我們看js如何定義“靜態類”,

      function class1() { // 構造函數

      }

      // 靜態屬性

      class1.staticProperty = " test " ;

      // 靜態方法

      class1.staticMethod = function () {

      alert(class1.staticProperty);

      }

      function test() {

      // 調用靜態方法

      class1.staticMethod();

      alert( typeof (class1));

      }

      接著看“抽象類”:

      /*

      在傳統面向對象語言中,抽象類中的虛方法必須先被聲明,但可以在其他方法中被調用。

      而在JavaScript 中,虛方法就可以看 該類中沒有定義的方法,但已經通過this 指針使用了。

      和傳統面向對象不同的是,這里虛方法不需經過聲明,而直接使用了。這些方法將在派生類

      中實現

      */

      // 定義extend 方法

      Object.extend = function (destination, source) {

      for (property in source) {

      destination[property] = source[property];

      }

      return destination;

      }

      Object.prototype.extend = function (object) {

      return Object.extend.apply( this , [ this , object]);

      }

      // 定義一個抽象基類base,無構造函數

      function base() { }

      base.prototype = {

      initialize: function () {

      this .oninit(); // 調用了一個虛方法

      }

      }

      // 定義class1

      function class1() {

      // 構造函數

      }

      // 讓class1繼承于base 并實現其中的oninit方法

      class1.prototype = ( new base()).extend({

      oninit: function () { // 實現抽象基類中的oninit 虛方法

      // oninit 函數的實現

      }

      });

      我們看到,上面“讓class1繼承于base 并實現其中的oninit方法時”,使用了“繼承”的概念,請留意。再來看一下執行的效果:

      function test() {

      var obj = new class1();

      obj.oninit = function () { alert( " test " ); }

      obj.oninit();

      }

    【Javascript 面向對象編程】相關文章:

    javascript面向對象中的對象怎么理解09-02

    2016年java面向對象編程題庫及答案10-24

    javascript編程異常處理的方法08-04

    javascript克隆對象深度介紹07-25

    JavaScript中的三種對象10-24

    使用ajax操作JavaScript對象的方法09-28

    JAVA面向對象的三大特性06-14

    關于javascript對象之內置和對象Math的使用方法10-08

    PHP面向對象重載重寫的不同10-25

    JavaScript高級程序設計:本地對象Array10-22

    主站蜘蛛池模板: 久久久久久久久久久免费精品| 无码乱码观看精品久久 | 精品久久久无码中文字幕| 国产麻豆精品一区二区三区v视界| 蜜臀AV无码国产精品色午夜麻豆| 国产精品久久久天天影视| 亚洲精品国产精品乱码视色| 欧美激情精品久久久久久久| 91自慰精品亚洲| 久久精品无码一区二区三区| 国产精品成人观看视频国产奇米 | 亚洲AV无码久久精品狠狠爱浪潮 | 99久久免费国产精精品| 亚洲国产精品VA在线看黑人| 久久久久国产成人精品亚洲午夜| 永久免费精品视频| 国产精品你懂的| 99国产精品国产精品九九| 激情亚洲一区国产精品| 日本VA欧美VA精品发布| 最新精品露脸国产在线 | 亚洲精品乱码久久久久久中文字幕| 久久亚洲国产精品五月天婷| 精品久久久久久无码免费| 国产精品热久久毛片| 99久久精品国产一区二区三区 | 国产精品成人va在线观看| 国产成人精品日本亚洲网站 | 精品无码人妻夜人多侵犯18| 欧洲精品色在线观看| 亚洲精品中文字幕乱码三区| 亚洲欧洲久久久精品| 一本色道久久综合亚洲精品 | 亚洲欧洲美洲无码精品VA| 欧美亚洲综合免费精品高清在线观看| 精品国精品国产自在久国产应用男| 国产精品国产AV片国产| 黑人无码精品又粗又大又长| 久草欧美精品在线观看 | 无码人妻精品一区二区蜜桃AV| 日韩精品欧美|