アプリキャストで「Infinite Loop??」になったときの対処法
アプリキャストで少し複雑なコードを書くと、よく「Infinite Loop」というエラーに遭遇します。
これはfor文などの制御構造でループをまわしすぎると出るエラーなのですが、、、
//スクリプト for (var i = 0; i < 10000; i++) { print('' + i); } //ログ出力 0 1 2 (中略) 998 999 JS_ERROR: memory:0x4d6fe60,0xff.FileLoad.0x2e:0: Infinite Loop?? Script Stopped.
と、このようにたった1000回のループで止まってしまうため、かなり厳しめの制約となっています。
ただ実はこれを回避する方法があるんです。それは、、、
続きを読むアプリキャストでは__proto__を使ってオブジェクトを継承する
あまり知られていませんが、JavaScriptでオブジェクトの継承関係を実現する最もスマートな方法は__proto__を使用する方法です。
クラスの継承は、Subclass.prototype.__proto__ = Superclass.prototype;というオマジナイを書けばOKです。
プログラマのためのJavaScript (11):継承についてもう少し - 檜山正幸のキマイラ飼育記 (はてなBlog)
一般的にはnewを使用する方法がよく知られていますが__proto__の方がより柔軟で副作用の少ない方法です(理由は上記引用元のサイトが詳しいです)。
ただこの方法は使用可能な環境が限定されてしまうため、クロスプラットフォームであることが重要な意味を持つブラウザのJavaScriptプログラミングでは、この手の継承が使われることはほとんどありません。
この方法は、__proto__プロパティの存在と操作可能性に頼ってます。しかし残念ながら、__proto__はECMAの標準ではなく、すべての環境で使えるものではありません。例えば、IEブラウザ環境ではダメです。
プログラマのためのJavaScript (11):継承についてもう少し - 檜山正幸のキマイラ飼育記 (はてなBlog)
また__proto__は次世代ECMAScriptでも標準化はされませんでした。残念ながら今後もブラウザ界隈で陽の目を見る可能性は少ないでしょう。
ECMAScript 3.1 では、(中略)プロトタイプの動的な代入は出来ないので、 __proto__ の全機能が使えるようになった訳ではありません。
次の JavaScript の仕様はこうなる! ECMAScript 3.0 から 3.1 への変更点まとめ - IT戦記
さて前置きが長くなりましたが、アプリキャストでの継承です。
アプリキャストのウィジェット開発用ライブラリ『aclib』
アプリキャストのウィジェットを開発するためのJavaScriptライブラリ、aclib を、Google Codeで公開しました。
Google Code Archive - Long-term storage for Google Code Project Hosting.
以下の機能を提供します。
- 組み込みオブジェクトの拡張
- オブジェクト指向のノードアクセス
- キャッシングによるノードアクセスの高速化
- イベントのディスパッチ機構
- コールバックの無名関数対応
- 無制限のタイマ
- HTTPリクエストキューイング
- リストボックス、プログレスバー、スライダ、スクロールバー
ライセンスはMIT。詳しい使い方など少しずつ紹介してく予定。
アプリキャストで開発を始める時に見るサイト
アプリキャストでウィジェット開発を始める人のために有用なサイトをまとめ。
アプリキャストプログラミング:Geekなぺーじ
大量のサンプルと解説。
本家サイトのドキュメントはそれなりにボリュームがあるので、ここのコピペから始めてみる、というのが手っ取り早くていい気がする。
http://www.jp.sonystyle.com/Taiken/Original/Applicast/develop_make.html
本家ソニーの開発者向けサイト。
「アプリキャスト開発ツール各種ダウンロード」から、開発者向けドキュメントをダウンロードして読むことができる。とはいえ量が多いので、わからない場合に必要な部分を参照するような使い方がよさそう。
随時追加の予定。