淺談Javascript的反射機制

來源:互聯網
上載者:User
我不知道自己這麼定義是不是準確,因為本身我對反射不怎麼瞭解,只是知道通過反射可以擷取一個類的方法和屬性,慚愧,說這句話怎麼也不像一個程式員!我這麼定義這一個標題,可能對於我的需求而言,有點過大,但是還是這麼寫下來,只是給自己一個研究的問題,饅頭總是要一口一口的吃!
需求:判斷一個對象為Array
就是這麼一個簡單的需求,說不上什麼反射,呵呵。
在網上查了一下資料,解決辦法如下:
可以判斷它的構造器是什麼,進而判斷它是Array還是Object!<script>   
var o=new Array('10','25','50');   
if (o.constructor ==  Array)   
{   
  alert("Array");   
}   
    
var   str="xxxxxxxxxxxxxx";   
if (str.constructor == String)   
{   
  alert("String");   
}   
</script>

在js協助中,Contructor解釋如下:
constructor 屬性
描述
表示建立對象的函數。
文法
object.constructor
必需的 object 參數是對象或函數的名稱。

說明
constructor 屬性是所有具有 prototype 的對象的成員。它們包括除 Global 和 Math 對象以外的所有 JScript 固有對象。constructor 屬性儲存了對構造特定對象執行個體的函數的引用。 例如:
x = new String("Hi");
if (x.constructor == String)
    // 進行處理(條件為真)


function MyFunc
{
    // 函數體。
}

y = new MyFunc;
if (y.constructor == MyFunc)
   // 進行處理(條件為真)

這裡再引用flyingis的JavaScript 對象的反射及應用中的幾句話:
檢測一個JavaScript對象是否支援某種特定的屬性或方法:
if (typeof(obj.property) != "undefined") {}
這樣聲明比直接使用"if (obj.property)"來描述要更準確,因為當obj.property的值為false、0、null的時候,雖然該屬性存在,但返回的結果卻恰恰相反。

如果要求檢測更詳細一些,查看該屬性的具體類型,可以用instanceof操作符:
if (obj instanceof PredefinedObj) {}
但是,當對obj對象進行條件檢測的時候,如果多種條件的物件類型存在繼承關係,則需要注意代碼的書寫順序,例如:

function() ExamineType(obj) 
{
  if (obj instanceof Object) 
  {
    alert("An Object");
  }
  else if (obj instanceof Array) 
  {
    alert("An Array");
  }
}

上述代碼執行的結果會認為原為Array類型的obj是一個Object,因為Array本身就是從Object繼承而來,顯然,將對Array的檢測放在前面會得到更精確的結果。因此,使用instanceof來判斷物件類型,需要注意當兩個對象存在繼承關係的時候,應該關注檢測順序的問題,進一步我們可以想到,JSON建立的對象不是Object就是Array,使用instanceof來檢測JSON對象意義不大。

這裡再推薦一篇文章,希望大家能有點收穫《AJAX的JavaScript的反射機制》《利用反射機制和prototype 實現繼承》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.