トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     withの使い方
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.12970
投稿日時: 2004-12-2 8:41
Re: withの使い方
ん?
youichさん>
お、彼氏ができて、じゃんけんをしたら負けて
泣いちゃったんですか。そうですかー、青春してますね\(⌒▽⌒)/

びっくりしました。あ、そういう意味ですか。アバターのことですね。
違います? 彼氏とかなんとかもうそんな若くありません。
このコ達お友達です。後8種類いるんですけど入りませんでした。今後ともよろしくお願いします!という意味です。
youich
Åê¹ÆNo.12954
投稿日時: 2004-12-1 22:52
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: withの使い方
引用:

野中文雄さんは書きました:
ドキュメントの記述としては、スコープチェーンの遠い順に列挙されているんですよね。ですから、「最後」が真っ先に参照されます。

前後にそういう文脈があったのですね、失礼しました。m(_ _)m

with対象のオブジェクトを(識別子を検索解決する時に)
一番最初に探し始めるようにする。ということでOKですね。


引用:

erikoさんは書きました:
お疲れ様です。



お、彼氏ができて、じゃんけんをしたら負けて
泣いちゃったんですか。そうですかー、青春してますね\(⌒▽⌒)/


----------------
- yo

ゲスト
Åê¹ÆNo.12952
投稿日時: 2004-12-1 21:56
Re: withの使い方
お疲れ様です。

野中さん> 「使えない」という訳ではなく、仕様と具体的な使用状況には注意が必要だということでしょう。

失礼しました。『使えない』では語弊がありました。使うときは『注意が必要』ですよね。以後気をつけます。

野中さん> コードヒントやシンタックスのカラーリングが、活用できるからです。

なるほど。そう言われればそうですよね。
野中文雄
Åê¹ÆNo.12950
投稿日時: 2004-12-1 21:15
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: withの使い方
「使えない」という訳ではなく、仕様と具体的な使用状況には注意が必要だということでしょう。もっとも、withを使った方が便利といえる場合は、きわめて限られるように思います。

たとえば、以下のスクリプトは、一見withを使った方がすっきりしてよさそうに感じられます。
with (_root.my_mc) {
    beginFill(0x00FFFF);
    lineStyle(2, 0x0000FF);
    moveTo(0, 0);
    lineTo(100, 0);
    lineTo(100, 100);
    lineTo(0, 100);
    endFill();
}

ところが、実際に「書いて」みれば、つぎのスクリプトの方がミスの可能性は少ないでしょう。
_mc = _root.my_mc;
_mc.beginFill(0x00FFFF);
_mc.lineStyle(2, 0x0000FF);
_mc.moveTo(0, 0);
_mc.lineTo(100, 0);
_mc.lineTo(100, 100);
_mc.lineTo(0, 100);
_mc.endFill();

コードヒントやシンタックスのカラーリングが、活用できるからです。
引用:
erikoさんは書きました:
いろいろあるのねぇ?ということでwithは完璧には使えないということを覚えておきます。


----------------
 

ゲスト
Åê¹ÆNo.12947
投稿日時: 2004-12-1 19:42
Re: withの使い方
私もお礼を一言。
いろいろご投稿くださった皆様ありがとうございました。

ちょっと今の私では全理解は難しいですが、
いろいろあるのねぇ?ということでwithは完璧には使えないということを覚えておきます。
永井勝則
Åê¹ÆNo.12916
投稿日時: 2004-12-1 10:49
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: withの使い方
youichさん、野中さん、ありがとうございます。
すっきりとよく分かりました。
"_プロパティ"と".プロパティ"の違いもよく分かりました。
これはそれぞれの誕生が、Flash5以前とFlashMX時というのに関係していますね。

結果として、普段同じプロパティ扱いしている"_プロパティ”と”.プロパティ”は、with(){}を使う時には注意が必要ということですね。
というか、with(){}は、そういうプロパティを扱うときは使用しない方がよいと思います、私見ですが。私は全く使ったことがありません。

「初心者専用」という枠を超えて、ディープな_proto_世界の話となりました。
にしてもすっきりしました。ありがとうございました。


----------------
永井勝則:
himco.jp :

野中文雄
Åê¹ÆNo.12906
投稿日時: 2004-12-1 5:01
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: withの使い方
ドキュメントの記述としては、スコープチェーンの遠い順に列挙されているんですよね。ですから、「最後」が真っ先に参照されます。

参考:「Macromedia Flash デベロッパーセンター」>「ActionScript コーディングの最善の方法」(PDF 474KB)
引用:
youichさんは書きました:
引用:
'with'アクションは、暫定的にオブジェクトをスコープチェーンの最後に追加します。'with'アクションの実行が終了すると、暫定オブジェクトはスコープチェーンから削除されます。

えーっと、オブジェクトをスコープチェーンの最後に追加するんじゃなくて
オブジェクトをスコープチェーンの先頭に挿入する、じゃないでしょうか??

同じことですが、ご参考までに。
trace(my_mc.__proto__ === MovieClip.prototype);  // 出力: true
my_mc.__proto__ = Object.prototype;
trace(my_mc.enabled);  // 出力: undefined
trace(my_mc._visible);  // 出力: true

引用:
enabledプロパティはprototypeオブジェクトに設定されていて、インスタンス自身のプロパティとしては
初期状態のままでは未定義なのでwith内からは設定できないのだと思います。
それに対して_visibleや_x,_y等のプロパティはインスタンスがステージに配置された時にそのインスタンスの
プロパティとして設定済みなので、with内からも設定ができるということじゃないかと思います。
with(my_mc){
	__proto__.enabled = true;
}

...[中略]...
これは、すべてヘルプの通りの動作ということでいいんじゃないかと思います。
引用:
helpより

with アクション内に変数を設定するには、with アクションの外側で変数を宣言しておくか、変数を設定するタイムラインへのフ ルパスを入力する必要があります。


----------------
 

youich
Åê¹ÆNo.12902
投稿日時: 2004-12-1 1:05
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: withの使い方
こんにちは永井さん。

引用:

'with'アクションは、暫定的にオブジェクトをスコープチェーンの最後に追加します。'with'アクションの実行が終了すると、暫定オブジェクトはスコープチェーンから削除されます。


だそうです。

えーっと、オブジェクトをスコープチェーンの最後に追加するんじゃなくて
オブジェクトをスコープチェーンの先頭に挿入する、じゃないでしょうか??


引用:

で、ムービークリップの場合を調べました。
with(my_mc){
_visible=false;//OK
gotoAndStop(XX);//OK
startDrag()://OK
}
で、自作の関数もその定義をwith()ステートメントの前に書けば、with()内で実行されました。

enabled=false//NG
これはenabledはmy_mcのプロパティ変数でなく、デバッガを見るとlevel0の変数になっていました。
で、with()の前に、
my_mc.enabled=true;
と初期値の設定をしておくと有効になりました。

_visibleはそのまま有効なのにenabledはそのまま使えないのです。
変な話です。

enabledプロパティはprototypeオブジェクトに設定されていて、インスタンス自身のプロパティとしては
初期状態のままでは未定義なのでwith内からは設定できないのだと思います。
それに対して_visibleや_x,_y等のプロパティはインスタンスがステージに配置された時にそのインスタンスの
プロパティとして設定済みなので、with内からも設定ができるということじゃないかと思います。

with(my_mc){
	__proto__.enabled = true;
}



ややこしく書いてしまったのでまとめます。
Button.prototype.x  = "Hello";

with(button1){
	
	//__proto__.enabled = false; // OK prototypeオブジェクトにはenabledプロパティが設定済みなのでOK
	//valueOf().enabled = false; // OK 自身への参照を得てそのenabledプロパティに設定するのでOK
	enabled = false; // NG プロパティの設定にはprototypeチェーンを逆上ってはできない
	         //(自身のプロパティにはenabledプロパティが未定義)
	
	trace(x); // OK プロパティの読み出しはprototypeチエーンを逆上っておこなわれる
													 
}


これは、すべてヘルプの通りの動作ということでいいんじゃないかと思います。
引用:

helpより

with アクション内に変数を設定するには、with アクションの外側で変数を宣言しておくか、変数を設定するタイムラインへのフ ルパスを入力する必要があります。


----------------
- yo

永井勝則
Åê¹ÆNo.12895
投稿日時: 2004-12-1 0:24
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: withの使い方
こつこつ検証してみました。
野中さんのサイトのTechNoteスコープチェーンによると、
引用:
'with'アクションは、暫定的にオブジェクトをスコープチェーンの最後に追加します。'with'アクションの実行が終了すると、暫定オブジェクトはスコープチェーンから削除されます。

だそうです。

で、ムービークリップの場合を調べました。
with(my_mc){
_visible=false;//OK
gotoAndStop(XX);//OK
startDrag()://OK
}
で、自作の関数もその定義をwith()ステートメントの前に書けば、with()内で実行されました。

enabled=false//NG
これはenabledはmy_mcのプロパティ変数でなく、デバッガを見るとlevel0の変数になっていました。
で、with()の前に、
my_mc.enabled=true;
と初期値の設定をしておくと有効になりました。

_visibleはそのまま有効なのにenabledはそのまま使えないのです。
変な話です。

ボタンの場合も同様に、
Button.enabled=true;
with(Button){}
で有効になりました、

しかし一番初めの投稿にあった、
Button.gotoAndStop(XX)
は動作しません。これって元々動作するもの?という疑問が生じています。

ごく最近からさかんに書き込みに参加していますが、疑問質問などに答えるため、自分で行う検証や実験が非常にお勉強になり、自分のためになっています。


----------------
永井勝則:
himco.jp :

copperroad
Åê¹ÆNo.12889
投稿日時: 2004-11-30 20:52
半人前
居住地:
投稿: 59
使用環境:
Win Xp professional,Flash CS3
IE7.0
Re: withの使い方
みなさま、いろいろご教授ありがとうございます!
withはあんまり使うなってことですね^^;
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops