
火曜日, 9 16, 2008
public修飾してある一部のインスタンスメソッドにアクセスできない!
という事態が発生して悩みました。
きちんとインスタンスへの参照を保持しているし、
その証拠に他のインスタンスメソッドはちゃんと実行できるのに…といった状況。
奇跡的に原因がわかったので、
個人的にはまったのでメモ代りにここに書いておきます。
でももしかしたらこれって常識なのかな…?
金曜日, 6 20, 2008
前に一度覚えたのだけれども忘れてしまっていたので、メモ。
どこに定義されているとしても、クロージャにおけるthisキーワードはグローバルオブジェクトを参照する。もしも親であるインスタンスメソッドを参照したいときには、thisキーワードを変数へ代入してスコープを確保しておくこと。
function enclosure():void {
var scope:Object = this;
function closure():void {
trace(scope);
}
}
理論ばっかり専攻しているので、実践も積まないとねー、とか考えている今日この頃です。
木曜日, 6 12, 2008
最近as3.0を(ちゃんと)勉強し始めたのですが、 手をつけてみると思っていたよりも面白いですね。 as2.0でしばらくはやっていこうかと思っていたのですが、 本格的にas3.0での開発に移行したくなってきました。
ただ、いろいろなブログに書かれているように、 やっぱりas2.0の方が小回りは利きそうですので、 こちらも細々とやっていきたいとは思っています。
オブジェクト指向的なコーディングをするにあたって、 「as」という拡張子を持つファイルをflaファイルの外部に作成する必要があります。 このasファイルはなんてことない、ただのテキストファイルなので、 テキストエディタから編集したものでもちゃんと動きます。 htmlからJavascriptが記述されているjsファイルを読み込むような感覚に似ていますね。
今日はコンストラクタについて。
水曜日, 6 04, 2008
今回はちょっと寄り道(手抜き)して、 あまり使うことはないだろうけど面白い仕組みを紹介します。 ECMAScriptでは高階関数やクロージャという概念を利用することができます。 まず高階関数について、Wikipediaの概要にこうありました。
Wikipediaより引用:高階関数
高階関数(こうかいかんすう、英: higher-order function)とは、
プログラミング言語において、関数を引数にしたり、
あるいは関数を戻り値とするような関数の事である。
引数や戻り値の関数もまた高階関数となり得る。
あまりピンときませんね…この高階関数という仕組みを使うとクロージャが実現できます。このクロージャを使うとローカル変数が変な(?)ことになります。
火曜日, 5 20, 2008
どうにかこうにか第二回を書くことができました。 今回も広く浅くお送りしたいと思います(興味を持つきっかけになってもらえたら十分ですね)。 実際にオブジェクト指向のサンプルがでてくるまではまだ先になるかと思いますけど、 初心者によるOOPの第二回です。
前回のネタで グローバル変数とローカル変数の有効範囲(スコープ)の違いについて 書かせてもらったのですが、基本はあんな感じです (もっと奥は深いので、いろいろと調べてみてください)。
今回は仮引数について軽く触れてみたいと思います。いちおう動作確認はFlash上でしてありますが、何か間違ったことを書いていたらご指摘ください。
金曜日, 5 09, 2008
OOP(Object Oriented Programming)とは、オブジェクト指向のことです。字面的にも、語感的にも個人的にはあまり好きな呼び方じゃないんですが、いかんせんタイトルが長くなってしまうので。
やっとこさオブジェクト指向の知識だけではなく、 実制作にその概念を取り入れることができるようになってきました。 そこにたどり着くまでの紆余曲折を書いてしまうと、かなり深い話になってしまいます。
でもこのブログでそんなに深い話を書いてもだれも読んでくれませんので、 プログラムに関して簡単だけれども、とっても大事な仕組みを紹介していこうと思います。※第二回があるかどうかはわかりませんけどね
扱う言語はActionScriptなので、同じECMAScript(エクマスクリプト)を源流とするJavaScriptにも共通した概念が通用するんじゃないかと思います。関数を変数として扱えるところとか、一番よく似てますね。
今回はスコープのお話。
金曜日, 2 01, 2008
簡単な継承のサンプルを作ってみました。
クラスをnewする際にbindなりなんなりで、thisキーワードを束縛することができるかどうかが不明なので、とりあえずnewする際にエレメント自信を引数として渡しておくことで解決。
つまり、「this.self」に入っているのは、エレメントの参照値。その参照値をプロパティとして登録しておくことで、いつでもエレメントにアクセスできるようになる。
…わかりづらいですよね。
<script type="text/javascript" src="js/mootools.js"></script>
<script type="text/javascript">
// 親クラスを定義
var SuperImg = new Class({
// mootools依存のコンストラクタ
initialize: function(obj, opts){
// ここで、自分自身をプロパティに登録しておく
this.self = obj;
// テスト用のプロパティを作成
this.tag = this.self.tagName;
// デフォルトのプロパティを設定
this.message = "default message";
this.language = "JavaScript";
// オプションが設定されていれば、デフォルトのプロパティを継承
$extend(this, opts || {})
},
// マウスダウンされた時の処理
onmousedown: function(){
alert(this.self.tag);
},
// マウスオーバーされた時の処理
onmouseover: function(){
alert(this.message);
alert(this.language);
}
});var ini = function(){
$extend($$("img")[0], new SuperImg($$("img")[0],{message: "msg継承"}));
}window.addEvent("domready", ini);
</script>



