+ JavaScript の質問用スレッド vol.55 +
あ、ごめん、Objectは論外ねw
そういう言語なんだから自由に拡張すればいいだろ。
まあこのように、議論百出くらい危険というか(w
ところで私ことスレ立て人してるのですが、連休で明日から
6日まで出かける間に満杯になると思われるので、どなたか
適当に次スレ立ててくださいませ…
>>937 全然危険じゃないというか、危険を煽る必要が全くない。
仮にバグっても、初心者1週間でもない限り、誰でも一瞬で気付いて修正できる。
いやそういう意味じゃなく単に賛否両論あるねという意味
なんだがそう読めないかな。賛成派がいることは否定しないよ。
>>937 乙。一路平安!帰国の際はご一報を。マカデミアナッツageよろ。
常時粘着してないと毎度々々スレ立てなんてできないよな…
前スレであったけど、言語の基本的な性能を失わせるから駄目なんじゃなかったっけ。
危険を煽るとかそういうレベルではなく駄目だろ。
俺は組み込みオブジェクトも拡張できるのが
JavaScriptの基本的な性能のひとつだと思ってるがな。
ObjectはさすがにないがArrayならメリットのほうが大きいだろ。
大体配列をfor-in文で回したら列挙の順番が保証されないし、
疎な配列なんて普段使わんから配列に関するfor-in文の有効性を感じない。
まあこれは全部自作スクリプトで構成するのが前提なんで、
外部ライブラリとか使うならデメリットのほうが上回るかもしれんが。
>>929 自分で拡張するのも悪くないと思うが、prototype.js を使うのがデファクトスタンダードかと。
Rubyちっくなクロージャも簡単に使えるようになる。
疎な配列は、使うと便利だけどな。慣れてない人が多いだろうけど。
俺は組み込みオブジェクトのprototype拡張って、グローバル関数を作るのと同じくらい嫌だな。
適当なクラスを作るほうがいいなぁ。好みの問題だけどね。
>>946 > グローバル関数を作るのと同じくらい嫌だな。
グローバル関数を作るのがかなり嫌な感じに読み取れたんだけど、
グローバル関数ってそんなに作らない方が良いものなの?
適当に作る時はクラスとか用意せずグローバル関数で作っちゃうんだけど。
>>947 適当なときは何をやってもいいと思うけど、
納品するソースコードの構造にはかなり気を遣う気がする。
基本的にはグローバル変数は1個か2個で、
あとはスコープで必要ないところから見えないようにパッケージしてる。
>>945 >Rubyちっくなクロージャも簡単に使えるようになる。
現在はともかく、初期においてはどう見てもJS初心者だった作者が
勢いで好きなRuby風に書いたのだろうから、Rubyチックなのは当たり前だろう。
しかし、クロージャに関しては、Rubyチックなクロージャにできるわけがない。
そもそもRubyのクロージャは個性的だろ。少なくともJSのそれ(関数でクロージャ)とは違う。
まあ、メソッドの名前などが同じということと混同しているだけだろうが、少しでも正しい向きに認識した方がいい。
951 :
945:2007/05/03(木) 16:33:04 ID:???
そのとおり、Rubyちっくなのはクロージャを利用するEnumerableなメソッドな。
eachはもとより、detectとかfindall、そしてinjectとか。
JSのクロージャじゃなくて、Prototype.jsで実装しているクロージャのこと。
関数でクロージャというのは、Rubyでも基本的には同様だ。
>しかし、クロージャに関しては、Rubyチックなクロージャにできるわけがない。
というのはコードブロックのスコープのことでも指してるのか?
>関数でクロージャというのは、Rubyでも基本的には同様だ。
スレ違いなんだが、それどこの脳内Ruby?w
正確には関数じゃなくてメソッドな。Rubyなんだから
955 :
Name_Not_Found:2007/05/05(土) 00:31:18 ID:Etv08Alo
質問なんですが、jsファイルからjsファイルをインクルードすることは不可能なんでしょうか?
ねだるな、ググれ、さすれば与えられん
つJSONP
実際はJSONPを使わないけどな
さすったら赤くなってきたよ
function hoo(id_num) {
id_num.innerText = "Changed!";
}
これがうまいこと行かない。。
id_numが展開されてないみたいなんだけど、どうすればよろし?
>>960 どう上手くいかないかってエラーと、
hooの呼び出し方をどうしてるかを書いた方がよろし
962 :
960: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とならない。
何かいい方法ない?
inputを閉じてないのは何故なんだぜ?
>>962 spanの前でinputを閉じてると仮定して、やりたいことはIEで上手く行ってる気がするけど?
Firefoxで駄目って言うならinnerTextをinnerHTMLに変えたらいいのかな
ただ、document.getElementById()使ってない時点で気持ち悪いから
FirefoxにFirebug入れてバグ取りした方がいいと思うよ
Firebugって作者の独りよがりなtoString()の結果を吐く使えない拡張のことだよね。
面白いけど、あんなもの使えませんよ。
喜んでるのはPrototype.jsで入門したような初心者ばっかりじゃん。
苦労人乙。
いまだにprototype.jsとか使ったことないんだけど、最近とても負け組な気がしてます。
>>965 >>962の状態から薦めるとしたらFirebugが一番いいかなと思ったのだけど。
あぁ。Firefoxは普通にjsコンソールでわかるのか。
Firebug入ってるのがデフォだから入れないと見れないかと勘違いした。
prototype.jsは要らん。中見ると分かるが、あのライブラリを作った人間は
JavaScriptを他言語の視点で見ている。すでにbuggieなところも指摘されて
いる。要するに自作関数ひとつロクに書けない奴がありがたがっているだ
けのもの。
それをここに書き込んでも、空ろに響くだけ。
971 :
Name_Not_Found:2007/05/06(日) 14:27:39 ID:aETLRuxv
質問です。
var a = 1;
f(a);
function f(b){ alert( b ); }
で、f(a)を実行する時点でどうしてオブジェクト未定義の
エラーにならないのでしょうか。そのときはまだ関数が読
み込まれていないのでエラーが出ると思うのですが。
関数は先に認識されてから実行される
973 :
971:2007/05/06(日) 16:08:50 ID:aETLRuxv
>>972さん
そういうことなんですね。ありがとうございます。
ところでjqueryってどこからダウンロードしたらいいんですか?
休みはもうすぐ終わりだな
月曜日だな
977 :
Name_Not_Found:2007/05/06(日) 21:48:41 ID:J0s6cMJQ
script.js
----
function hage(){
alert('go bold!');
}
----
index.html
----
<script src="script.js"></script>
<button onclick="hage();">hage</button>
----
上のソースで、script.jsの読み込みが完了していないときにボタンを押すとエラーになりますが、何かウマい解決方法はないでしょうか。
>>977 function f(){
alert();
}
var a=f;
a(); ←「 () 」
/*-------------*/
var a=function(){
alert();
}
a(); ←「 () 」
/*-------------*/
(function(){
alert();
})(); ←「 () 」
944です。
>>948 今回必要としている物とは違うようですが参考になりました。
機会があったら使用してみたいと思います。ありがとうございました。
質問した件はIE固有の話のため、少し強引ですがVBScriptとの連携で対応しようと考えています。
具体的にはVBScript側でProperty Let と Property Getを含めたClassの定義及び
インスタンス化までを行い、そのインスタンス変数をJavaScriptから使用します。
それでも生成済みオブジェクトに対して
動的にプロパティを追加することは出来ないですが、
例えば、Classの構造を記した文字列にプロパティ記述を追加し
execScriptすることで対応できないかと考えています。
スレ違いになりそうなのでこの辺で。
>>978 script.js内にダブらないグローバル変数を定義しておいて、変数が見つかるまでsetTimeoutで一定時間ごとにループしつつ判定し、見つかったらbuttonにonclickイベントを割り当ててからループをやめる
・・・のは無駄なのでscript.jsの最後にbuttonにonclickイベントを割り当てる処理を書く。
>>978 onclick="if (typeof hage == 'function') hage();"
しかしclickイベントタイプのようなbubblesプロパティがtrueであるイベントオブジェクトは
documentやwindowのように変更されない(変更されないと楽観視できる)オブジェクトを適切に選んでcurrentTargetにする。
ただしtargetを識別するための情報を事前に確保しておく。例えば<button id="HAGE">のように。
window.hage&&hage() しちゃうな。
>>982 と変わらんけど。
もしくは<head>内<script>でダミーのhoge()つくっといちゃう。
<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>
のようなリンクを作って、○○○○に今日の日付を入れたいのですが
どのようにすればいいのかわかりません
よろしくお願いします