国产激情久久久久影院小草_国产91高跟丝袜_99精品视频99_三级真人片在线观看

Javascript 面向對象編程

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

Javascript 面向對象編程

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

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

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

  // 定義函數(shù)的方式定義類

  function class1() {

  // 類成員的定義及構造函數(shù)

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

  }

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

  var obj = new class1();

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

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

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

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

  */

  function test() {

  alert( typeof (obj));

  }

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

  function class1() { // 構造函數(shù)

  }

  // 靜態(tài)屬性

  class1.staticProperty = " test " ;

  // 靜態(tài)方法

  class1.staticMethod = function () {

  alert(class1.staticProperty);

  }

  function test() {

  // 調用靜態(tài)方法

  class1.staticMethod();

  alert( typeof (class1));

  }

  接著看“抽象類”:

  /*

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

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

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

  中實現(xiàn)

  */

  // 定義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,無構造函數(shù)

  function base() { }

  base.prototype = {

  initialize: function () {

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

  }

  }

  // 定義class1

  function class1() {

  // 構造函數(shù)

  }

  // 讓class1繼承于base 并實現(xiàn)其中的oninit方法

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

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

  // oninit 函數(shù)的實現(xiàn)

  }

  });

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

  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