+ JavaScript の質問用スレッド vol.55 +

このエントリーをはてなブックマークに追加
935Name_Not_Found:2007/05/02(水) 13:01:23 ID:???
あ、ごめん、Objectは論外ねw
936Name_Not_Found:2007/05/02(水) 13:30:46 ID:???
そういう言語なんだから自由に拡張すればいいだろ。
937Name_Not_Found:2007/05/02(水) 13:36:50 ID:???
まあこのように、議論百出くらい危険というか(w
ところで私ことスレ立て人してるのですが、連休で明日から
6日まで出かける間に満杯になると思われるので、どなたか
適当に次スレ立ててくださいませ…
938Name_Not_Found:2007/05/02(水) 13:44:02 ID:???
>>937
全然危険じゃないというか、危険を煽る必要が全くない。
仮にバグっても、初心者1週間でもない限り、誰でも一瞬で気付いて修正できる。
939Name_Not_Found:2007/05/02(水) 14:59:39 ID:???
いやそういう意味じゃなく単に賛否両論あるねという意味
なんだがそう読めないかな。賛成派がいることは否定しないよ。
940Name_Not_Found:2007/05/02(水) 16:18:26 ID:???
>>937
乙。一路平安!帰国の際はご一報を。マカデミアナッツageよろ。
941Name_Not_Found:2007/05/02(水) 16:28:56 ID:???
常時粘着してないと毎度々々スレ立てなんてできないよな…
942Name_Not_Found:2007/05/02(水) 22:54:03 ID:???
前スレであったけど、言語の基本的な性能を失わせるから駄目なんじゃなかったっけ。
危険を煽るとかそういうレベルではなく駄目だろ。
943Name_Not_Found:2007/05/03(木) 02:45:23 ID:???
俺は組み込みオブジェクトも拡張できるのが
JavaScriptの基本的な性能のひとつだと思ってるがな。
ObjectはさすがにないがArrayならメリットのほうが大きいだろ。
大体配列をfor-in文で回したら列挙の順番が保証されないし、
疎な配列なんて普段使わんから配列に関するfor-in文の有効性を感じない。
まあこれは全部自作スクリプトで構成するのが前提なんで、
外部ライブラリとか使うならデメリットのほうが上回るかもしれんが。
944Name_Not_Found:2007/05/03(木) 09:41:19 ID:???
mozillaの__defineGetter__ , __defineSetter__ に相当する動作をIE6で実現したいのですが何か良い方法はありませんか。
http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters

945Name_Not_Found:2007/05/03(木) 10:39:43 ID:???
>>929
自分で拡張するのも悪くないと思うが、prototype.js を使うのがデファクトスタンダードかと。
Rubyちっくなクロージャも簡単に使えるようになる。
946Name_Not_Found:2007/05/03(木) 10:42:46 ID:???
疎な配列は、使うと便利だけどな。慣れてない人が多いだろうけど。
俺は組み込みオブジェクトのprototype拡張って、グローバル関数を作るのと同じくらい嫌だな。
適当なクラスを作るほうがいいなぁ。好みの問題だけどね。
947Name_Not_Found:2007/05/03(木) 11:31:56 ID:???
>>946
> グローバル関数を作るのと同じくらい嫌だな。

グローバル関数を作るのがかなり嫌な感じに読み取れたんだけど、
グローバル関数ってそんなに作らない方が良いものなの?
適当に作る時はクラスとか用意せずグローバル関数で作っちゃうんだけど。
948Name_Not_Found:2007/05/03(木) 12:34:37 ID:???
>>944
求めている物とは全然違うだろうが、
http://msdn2.microsoft.com/en-us/library/ms531030.aspx
にGET属性やPUT属性がある。
949Name_Not_Found:2007/05/03(木) 12:46:19 ID:???
>>947
適当なときは何をやってもいいと思うけど、
納品するソースコードの構造にはかなり気を遣う気がする。
基本的にはグローバル変数は1個か2個で、
あとはスコープで必要ないところから見えないようにパッケージしてる。
950Name_Not_Found:2007/05/03(木) 13:12:54 ID:???
>>945
>Rubyちっくなクロージャも簡単に使えるようになる。
現在はともかく、初期においてはどう見てもJS初心者だった作者が
勢いで好きなRuby風に書いたのだろうから、Rubyチックなのは当たり前だろう。
しかし、クロージャに関しては、Rubyチックなクロージャにできるわけがない。
そもそもRubyのクロージャは個性的だろ。少なくともJSのそれ(関数でクロージャ)とは違う。
まあ、メソッドの名前などが同じということと混同しているだけだろうが、少しでも正しい向きに認識した方がいい。
951945:2007/05/03(木) 16:33:04 ID:???
そのとおり、Rubyちっくなのはクロージャを利用するEnumerableなメソッドな。
eachはもとより、detectとかfindall、そしてinjectとか。
JSのクロージャじゃなくて、Prototype.jsで実装しているクロージャのこと。
関数でクロージャというのは、Rubyでも基本的には同様だ。

>しかし、クロージャに関しては、Rubyチックなクロージャにできるわけがない。
というのはコードブロックのスコープのことでも指してるのか?
952Name_Not_Found:2007/05/04(金) 11:30:47 ID:???
>関数でクロージャというのは、Rubyでも基本的には同様だ。
スレ違いなんだが、それどこの脳内Ruby?w
953Name_Not_Found:2007/05/04(金) 21:04:50 ID:???
正確には関数じゃなくてメソッドな。Rubyなんだから
954Name_Not_Found:2007/05/04(金) 22:31:30 ID:???
955Name_Not_Found:2007/05/05(土) 00:31:18 ID:Etv08Alo
質問なんですが、jsファイルからjsファイルをインクルードすることは不可能なんでしょうか?
956Name_Not_Found:2007/05/05(土) 01:56:02 ID:???
ねだるな、ググれ、さすれば与えられん
957Name_Not_Found:2007/05/05(土) 03:57:18 ID:???
つJSONP
958Name_Not_Found:2007/05/05(土) 06:22:05 ID:???
実際はJSONPを使わないけどな
959Name_Not_Found:2007/05/05(土) 23:46:49 ID:???
さすったら赤くなってきたよ
960Name_Not_Found:2007/05/06(日) 00:22:03 ID:???
function hoo(id_num) {

id_num.innerText = "Changed!";

}
これがうまいこと行かない。。
id_numが展開されてないみたいなんだけど、どうすればよろし?

961Name_Not_Found:2007/05/06(日) 00:33:32 ID:???
>>960
どう上手くいかないかってエラーと、
hooの呼び出し方をどうしてるかを書いた方がよろし
962960:2007/05/06(日) 01:00:30 ID:???
スマソ

function hoo(id_num) {
id_num.innerText = "Changed!";
}

呼び出し側
<input type="checkbox" name="1" value="chk" onClick="hoo(id_1);"<span id="id_1">データ取得する</span>

チェックボックスの横にある文字をチェックで動的に変更したいんだけど

hoo側のid_numが展開されずにid_1.innerTextとならない。
何かいい方法ない?

963Name_Not_Found:2007/05/06(日) 01:07:38 ID:???
inputを閉じてないのは何故なんだぜ?
964Name_Not_Found:2007/05/06(日) 02:53:37 ID:???
>>962
spanの前でinputを閉じてると仮定して、やりたいことはIEで上手く行ってる気がするけど?
Firefoxで駄目って言うならinnerTextをinnerHTMLに変えたらいいのかな

ただ、document.getElementById()使ってない時点で気持ち悪いから
FirefoxにFirebug入れてバグ取りした方がいいと思うよ
965Name_Not_Found:2007/05/06(日) 03:29:59 ID:???
Firebugって作者の独りよがりなtoString()の結果を吐く使えない拡張のことだよね。
面白いけど、あんなもの使えませんよ。
喜んでるのはPrototype.jsで入門したような初心者ばっかりじゃん。
966Name_Not_Found:2007/05/06(日) 03:38:22 ID:???
苦労人乙。
967Name_Not_Found:2007/05/06(日) 04:02:11 ID:???
いまだにprototype.jsとか使ったことないんだけど、最近とても負け組な気がしてます。
968Name_Not_Found:2007/05/06(日) 04:42:57 ID:???
>>965
>>962の状態から薦めるとしたらFirebugが一番いいかなと思ったのだけど。
あぁ。Firefoxは普通にjsコンソールでわかるのか。
Firebug入ってるのがデフォだから入れないと見れないかと勘違いした。
969Name_Not_Found:2007/05/06(日) 09:19:42 ID:???
prototype.jsは要らん。中見ると分かるが、あのライブラリを作った人間は
JavaScriptを他言語の視点で見ている。すでにbuggieなところも指摘されて
いる。要するに自作関数ひとつロクに書けない奴がありがたがっているだ
けのもの。
970Name_Not_Found:2007/05/06(日) 13:42:28 ID:???
それをここに書き込んでも、空ろに響くだけ。
971Name_Not_Found:2007/05/06(日) 14:27:39 ID:aETLRuxv
質問です。
var a = 1;
f(a);
function f(b){ alert( b ); }
で、f(a)を実行する時点でどうしてオブジェクト未定義の
エラーにならないのでしょうか。そのときはまだ関数が読
み込まれていないのでエラーが出ると思うのですが。
972Name_Not_Found:2007/05/06(日) 14:53:32 ID:???
関数は先に認識されてから実行される
973971:2007/05/06(日) 16:08:50 ID:aETLRuxv
>>972さん
そういうことなんですね。ありがとうございます。
974Name_Not_Found:2007/05/06(日) 21:06:29 ID:???
ところでjqueryってどこからダウンロードしたらいいんですか?
975Name_Not_Found:2007/05/06(日) 21:11:14 ID:???
休みはもうすぐ終わりだな
976Name_Not_Found:2007/05/06(日) 21:28:53 ID:???
月曜日だな
977Name_Not_Found:2007/05/06(日) 21:48:41 ID:J0s6cMJQ
http://blog.livedoor.jp/dankogai/archives/50824976.html
>記法中のjavascriptを、(function(){/* ... */})()でくるむことで、変数衝突を回避
とあるのですが、()()と囲んでいるのはなんでしょうか?
978Name_Not_Found:2007/05/06(日) 22:14:19 ID:???
script.js
----
function hage(){
alert('go bold!');
}
----

index.html
----
<script src="script.js"></script>
<button onclick="hage();">hage</button>
----

上のソースで、script.jsの読み込みが完了していないときにボタンを押すとエラーになりますが、何かウマい解決方法はないでしょうか。
979Name_Not_Found:2007/05/06(日) 22:17:23 ID:???
>>977
function f(){
alert();
}
var a=f;
a(); ←「 () 」

/*-------------*/

var a=function(){
alert();
}
a(); ←「 () 」

/*-------------*/

(function(){
alert();
})(); ←「 () 」
980Name_Not_Found:2007/05/06(日) 22:59:38 ID:???
944です。

>>948
今回必要としている物とは違うようですが参考になりました。
機会があったら使用してみたいと思います。ありがとうございました。

質問した件はIE固有の話のため、少し強引ですがVBScriptとの連携で対応しようと考えています。
具体的にはVBScript側でProperty Let と Property Getを含めたClassの定義及び
インスタンス化までを行い、そのインスタンス変数をJavaScriptから使用します。

それでも生成済みオブジェクトに対して
動的にプロパティを追加することは出来ないですが、
例えば、Classの構造を記した文字列にプロパティ記述を追加し
execScriptすることで対応できないかと考えています。

スレ違いになりそうなのでこの辺で。
981Name_Not_Found:2007/05/06(日) 23:01:02 ID:???
>>978
script.js内にダブらないグローバル変数を定義しておいて、変数が見つかるまでsetTimeoutで一定時間ごとにループしつつ判定し、見つかったらbuttonにonclickイベントを割り当ててからループをやめる

・・・のは無駄なのでscript.jsの最後にbuttonにonclickイベントを割り当てる処理を書く。
982Name_Not_Found:2007/05/06(日) 23:54:00 ID:???
>>978
onclick="if (typeof hage == 'function') hage();"

しかしclickイベントタイプのようなbubblesプロパティがtrueであるイベントオブジェクトは
documentやwindowのように変更されない(変更されないと楽観視できる)オブジェクトを適切に選んでcurrentTargetにする。
ただしtargetを識別するための情報を事前に確保しておく。例えば<button id="HAGE">のように。
983Name_Not_Found:2007/05/07(月) 06:27:12 ID:???
window.hage&&hage() しちゃうな。>>982 と変わらんけど。
もしくは<head>内<script>でダミーのhoge()つくっといちゃう。
984Name_Not_Found
<script language="JavaScript">
<!--
function myFunc(){
myD = new Date();
myYear = myD.getYear();
myYear4 = (myYear < 2000) ? myYear+1900 : myYear;
myMonth = myD.getMonth() + 1;
myMonth2 = (myMonth < 10) ? 0+""+myMonth : myMonth;
myDate = myD.getDate();
myDate2 = (myDate < 10) ? 0+""+myDate : myDate;
myMess = myYear4 + "" + myMonth2 + "" + myDate2;
document.write( myMess );
}
// -->
</script>

これでmyMessは20070507などとなってるわけですが、ここで

<a href=/contents/txt○○○○.html>今日のお話</a>

のようなリンクを作って、○○○○に今日の日付を入れたいのですが
どのようにすればいいのかわかりません
よろしくお願いします