HTMLDocumentには、document.imagesとかdocument.formsとか、DOM Treeからある要素のみを返すアクセッサがあります。
それとは別に DOM Coreには getElementsByTagName() というメソッドがあります。
これらは同じものだと勘違いしていたのですが、document.xxx はHTMLCollection, getElementsByTagName() は NodeListを返します。
で、HTMLCollection は NodeListを継承しているわけではないのです。
ま、HTMLCollection は NodeListと同じ属性とメソッドを持っているので、JavaScriptから見れば同じとみなしていいのかもしれませんが、どうも違和感が。。。
2009年8月17日月曜日
2009年8月16日日曜日
モジュール性
ちょっと調べたいことがあって
メイヤーの『オブジェクト指向入門』を読んでいたら、モジュール性の5つの基準が書いてあった。
以下抜粋。
- 分解しやすさ
- 組み合わせやすさ
- わかりやすさ
- 連続性
- 保護性
お、こんなの知らなかったぞ(汗
で、分解しやすさの説明に(抜粋)
- 依存関係は最小限に抑えなければならない。そうしなければ、個々のサブシステムの開発がほかのサブシステムの作業の進み具合によって限定される可能性がある。
うぅ、なんだか耳が痛い話。
ほかにも再利用性とか、いろいろためになる&&できていないはなしがちらほら。
分厚い本なので、調べモン程度にしか使わなかったけど、こりゃ一回通読しておいたほうがよさそうだな。
2009年8月15日土曜日
event handler content attributes
onXXXといったイベントハンドラを書ける属性がありますが、
HTML4.01のときは、この属性がかける要素が決まっていました。
HTML4.01のIntrinsic events
これが、HTML5だと、Global attributesとして定義されているので、すべての要素に書けます。
ということは、そのイベントハンドラが呼ばれるかどうかは、その要素にイベントを発火させられるかどうかということになります。
だから、「この要素にこのイベントハンドラを書けるのか」という質問されると、「この要素はフォーカスが当たるからonfocus/onblurが書ける」とか、そういった説明をしなければいけません。
これが、HTML5の要素はかなりあるので、意外と面倒くさいです。
ちなみに、実はHTML4.01では<img>要素にonload属性は書けませんでした。
(書いてあるコンテンツは結構あるみたいですが。)
でも、HTML5では、どの要素にもonload属性が書けるようになったので、リソースをロードする<img>要素ではloadイベントが発火するので、onloadイベントハンドラは呼ばれるのは正しい仕様です。
<img>要素の例を考えると、HTML5の考え方のほうが自然なのかもしれませんね。
HTML4.01のときは、この属性がかける要素が決まっていました。
HTML4.01のIntrinsic events
これが、HTML5だと、Global attributesとして定義されているので、すべての要素に書けます。
ということは、そのイベントハンドラが呼ばれるかどうかは、その要素にイベントを発火させられるかどうかということになります。
だから、「この要素にこのイベントハンドラを書けるのか」という質問されると、「この要素はフォーカスが当たるからonfocus/onblurが書ける」とか、そういった説明をしなければいけません。
これが、HTML5の要素はかなりあるので、意外と面倒くさいです。
ちなみに、実はHTML4.01では<img>要素にonload属性は書けませんでした。
(書いてあるコンテンツは結構あるみたいですが。)
でも、HTML5では、どの要素にもonload属性が書けるようになったので、リソースをロードする<img>要素ではloadイベントが発火するので、onloadイベントハンドラは呼ばれるのは正しい仕様です。
<img>要素の例を考えると、HTML5の考え方のほうが自然なのかもしれませんね。
2009年8月3日月曜日
はじめてのObjective-C
意味はないけどムシャクシャするので、
Objective-Cでコードを書いてみた。
いや、別にムシャクシャはしていないけど。
ということで、helloWorldを。
hello.m
Ojbective-Cは @interface で、クラスの定義を行い、@implementationでクラスの実装を行う。
サンプルでは、
一応C言語なので、Cの標準ライブラリをimportすれば使用できる。
で、メソッドの呼び出しは[]で行う。
Objective-Cはsamlltalkと同じメッセージ形式なので、
Linuxでのコンパイルは
しかし、Objective-Cとかいっても、これじゃどう見てもC言語には見えませんな。
Objective-Cでコードを書いてみた。
いや、別にムシャクシャはしていないけど。
ということで、helloWorldを。
hello.m
#import
#import
@interface TestClass : Object
- (void) getMessage;
@end
hello.m
#import "hello.h"
@implementation TestClass
- (void) getMessage {
printf("Hello Objective-C World\n");
}
@end
int main(int argc, char *argv[])
{
id obj = [ TestClass alloc ];
[ obj getMessage ];
return 0;
}
Ojbective-Cは @interface で、クラスの定義を行い、@implementationでクラスの実装を行う。
サンプルでは、
- (void) getMessage;
というメソッドを@interfaceで定義し、@implementationで実装している。 "-
"はインスタンスメソッドと言う意味。一応C言語なので、Cの標準ライブラリをimportすれば使用できる。
で、メソッドの呼び出しは[]で行う。
Objective-Cはsamlltalkと同じメッセージ形式なので、
[obj getMessage]
は、objに対してgetMessageというメッセージを送信しています。alloc
はNewと同じ。Linuxでのコンパイルは
$gcc -v -Wall -Os -o hello hello.m -lobjcとする。-lobjcというのが必要なんですな。
しかし、Objective-Cとかいっても、これじゃどう見てもC言語には見えませんな。
登録:
投稿 (Atom)