Well, ok, pun intended.
問題:
你想知道在某個物件(假設是 btn )中是否有一個名為 ‘title’ 的屬性,該怎麼做?
解法:
基本上這個問題有很多種可能解法,常見的有
1、用 try/catch block 去探測 if( btn[’title’] ) 如果回傳 false 就知道不存在
2、用 describeType 之類的 object utility 透過 reflection 知道物件的結構
但這種做法各有不同的爛法。
第1種做法會讓程式碼變的很不優雅,要一大堆 try/catch block。
第2種做法更麻煩,只為了找一個屬性,要把全部的東西都 dump 出來。
正解:
前幾天在翻 air 的 source code,意外發現下面這種寫法
if( ‘title’ in btn ){…}
他/她 直接用 in 就可以探測出 btn 中是否有某個物件,而且不需要 try/catch。
以往 in 都是用在 for in loop這樣的情境中,從來不知道也可以這樣玩,所以當初一看到可真是驚為天人。
後來翻了一下手冊才發現在 language elements 那章就明明白白有講啊,是自已白目沒認真看…
後記:
這件事告讓我們,沒事多讀 framework source code 絕對好處多多,每次我在看的時後,都覺得就在跟 adobe 的工程師對話,邊看邊想像他寫作時腦中的思路,為何他要做這個決定?為何這樣設計?為何寫這段code ?他有試過其它的方式嗎?是不有有其它限制?
不過看 code 也是要有技巧的,不是直接從第一行看到尾,這樣很容易入寶山還是空手回,比較好的方式是先有一個目標,然後進去挖,再搭配一些小技巧,收穫就會比較多(而且比較有效率…)。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |