のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,491,291人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
451 : Name_Not - 2011/12/24(土) 02:27:35.80 ID:??? (+57,+29,-17)
new忘れたときに意図しない場所にプロパティ追加されたりするとかってやつじゃないか
452 : Name_Not - 2011/12/24(土) 02:50:51.39 ID:??? (+36,-29,-30)
455 : Name_Not - 2011/12/24(土) 09:11:30.45 ID:??? (+62,+29,-1)
>>411
なるほど!よくわかりました!
456 : Name_Not - 2011/12/24(土) 11:00:32.04 ID:??? (+57,+29,-41)
関数定義も一応文として見れるんじゃない?
つうか実装レベルでみてみると定義しづらいね
457 : Name_Not - 2011/12/24(土) 12:15:42.87 ID:??? (+146,+22,-94)
オブジェクト指向の書き方がいまいち分かりません
関数をベタ書きで書いたりprototypeを乱用してます
良いオブジェクト指向の書き方で参考になるサイトを教えてください
458 : Name_Not - 2011/12/24(土) 12:17:42.95 ID:??? (-1,-29,-16)
document.getElementById().~
これ使えばOK
459 : Name_Not - 2011/12/24(土) 12:20:03.28 ID:??? (+57,+29,-8)
関数や制御構文はメソッドの中にしか書いてはならない
460 : Name_Not - 2011/12/24(土) 12:28:28.21 ID:??? (+113,+29,-28)
>>457
良いオブジェクト指向で書こうと思うのが誤り
良いJavaScriptを書こう
461 : Name_Not - 2011/12/24(土) 12:34:53.94 ID:??? (+48,-30,-34)
>>460
ありがとうございます
良いJavaScriptを書こうと思います
添削をお願いしてもいいでしょうか?

var a = new Object();
a.time = new Date();
alert(a.time);

という書き方は良いでしょうか?
462 : Name_Not - 2011/12/24(土) 12:42:02.51 ID:??? (+3,-29,-31)
まあ好みの範囲で悪くないと思うよ
一つ言うならtimeって明確な名前の子を持ってる
オブジェクトの名前がaって素朴過ぎる感じがする

場合によるけどこれなら別に
var time = new Date();
でいいんじゃないかと思う
463 : Name_Not - 2011/12/24(土) 12:47:42.85 ID:??? (+165,+29,-10)
本当に大丈夫ですかね?子飼弾先生に指摘されたら怖い
464 : Name_Not - 2011/12/24(土) 12:58:02.56 ID:??? (-1,-29,-19)
俺ならこうするわw
alert(new Date())
465 : Name_Not - 2011/12/24(土) 13:02:33.19 ID:??? (+57,+29,-22)
おそらく以降の処理でも使うんじゃないかな。
だから変数に入れているわけで。
466 : Name_Not - 2011/12/24(土) 13:23:19.37 ID:??? (+70,+29,-28)
>>463
コードが短すぎて良いコードか判断できないよ。
あえていうならオブジェクト初期化子にした方がいい。
467 : Name_Not - 2011/12/24(土) 13:25:22.30 ID:??? (+53,-29,-10)
var a = { time: new Date() };
こう?こうでいいんすね?怒られないすね?
468 : Name_Not - 2011/12/24(土) 13:26:11.60 ID:??? (+46,+28,+0)
まぁ、経験
469 : Name_Not - 2011/12/24(土) 13:44:45.53 ID:55qjskI1 (+29,+29,-13)
>>467
何をそんなに怯えてるんだよw
470 : Name_Not - 2011/12/24(土) 13:45:49.79 ID:??? (+57,+29,-4)
せっかくブログを作っても大物にディスられたら人生積むじゃん
471 : Name_Not - 2011/12/24(土) 13:48:25.02 ID:??? (+70,+29,-67)
>>467
だからコードが短すぎて判断できないんだってば。
jsfiddleに全部のコードをUPして評価して貰った方がいいよ。
prototype乱用ってわりにprototypeを全然使ってないし、正直意味がわからない。
>452を参考にするといいかもね。ひょっとして同じ人?
473 : Name_Not - 2011/12/24(土) 13:52:31.77 ID:??? (+114,+29,-41)
>>463
> 子飼弾先生に指摘されたら怖い
もしかして: 小飼弾
本人に直接聞いた方がいいよ。その人がどう判断するかをここの住人が知ってるわけないんだから。
(小飼弾氏はjavascripterとしては大物ではないと思うけど。)
474 : Name_Not - 2011/12/24(土) 13:55:32.68 ID:??? (+107,+26,+0)
>>457
>>461
>>463
が僕です
475 : Name_Not - 2011/12/24(土) 13:57:15.50 ID:??? (+73,+29,-100)
>>473
だってあの先生はJavascriptのブログをディスりまくってるじゃないすか
俺みたいなザコが先生のブログで質問したらまず囲いユーザーに潰されそうで怖いです
476 : Name_Not - 2011/12/24(土) 13:57:19.27 ID:??? (+71,+28,-4)
>>474
続けるなら名前を 457 にして。文脈から全部追うのは難しい。
477 : Name_Not - 2011/12/24(土) 13:58:39.13 ID:??? (+37,-29,-51)
>>472
グローバル変数にフラグを置く手法はどうかと思うけど、ハンドラ関数の中で分岐させるのが主流だと思う。
unbind() でイベント削除してもいいけど、その都度削除したり追加したりするのは効率がよくない。(ケースバイケースだけどね)
http://api.jquery.com/unbind/
478 : Name_Not - 2011/12/24(土) 14:00:05.58 ID:??? (+27,-30,-63)
>>472
そういうとこで躓くのは、いきなりjQueryからはじめるからか?

ヒント、$('#button').bind('click', callback);
479 : 472 - 2011/12/24(土) 14:01:13.03 ID:??? (+62,+29,-14)
>>477>>478
ありがとうございます
もうちょっとjQueryについて勉強しなおしてきます
481 : 457 - 2011/12/24(土) 14:03:45.83 ID:??? (+79,-30,-154)
すいませんでした457ってコテハンつけます
var a = {
"name":"坂本",
"age":"16",
"func":function(x){return x * 100;}
};
alert(a.func(10));
っていうのと
var a = function(){}
a.prototype.name = "坂本";
a.prototype.age = "16";
a.prototype.func = function(x){return x * 100;};
var obj = new a();
alert(obj.func(10));
っていうのと
var a = new Object();
a.name = "坂本";
a.age = "16";
a.func = function(x){return x * 100;};
alert(a.func(10));
この3つの中で良い書き方と悪い書き方を教えてください
482 : Name_Not - 2011/12/24(土) 14:14:13.39 ID:??? (+128,+29,-110)
>>481
質問の仕方だけど、コードを比較する場合は名前つけたほうがいいよ。上からabcにしようか。
aとcはほぼ同じだけど、普通はaの書き方をする。そんで、aとbの違いはそれがクラスかどうかってこと。
>>460に反するけどオブジェクト指向は必須だぞ。オブジェクト指向の概念、クラス定義、継承、このあたり勉強してこい。
483 : Name_Not - 2011/12/24(土) 14:17:12.55 ID:??? (+67,+29,-12)
>>481
状況によるから一概に良い・悪いは決められない。
その例題だとname,age,funcがバラバラだからa以外はありえないが。
484 : Name_Not - 2011/12/24(土) 14:22:26.94 ID:??? (+51,+29,-31)
>>480
はっきり言うけど、どーでもいい。こう書いたらこうなる、それが分かれば問題なし。
485 : 457 - 2011/12/24(土) 14:41:11.77 ID:??? (+72,+29,-25)
>>482-483
なるほど
ありがとうございます
基本はaで書くようにして必要に感じたときにbcで書きたいと思います
486 : Name_Not - 2011/12/24(土) 14:45:45.81 ID:55qjskI1 (+45,+29,-26)
>>482
安易にクラスって言葉使うと噛み付かれることがあるから気をつけなはれ
わかってる人はいいけどね
487 : think49 - 2011/12/24(土) 14:47:45.66 ID:??? (+1,-30,+0)
>>480
サイ本のページ数も示していただけると参照しやすく助かります。

(P96) "function文は厳密に言うと文ではありません。"
(P125) "function文は、構文上は文であり、関数名が必要です。関数リテラルは、構文上は式であり、関数名が不要です。"

ここでいわれる "構文上は" はおそらく Syntax を表しています。
"function文" は FunctionDeclaration に相当するので「構文上は関数定義」が正しいですね。
"関数リテラル" は FunctionExpression に相当するので「構文上は式」で合っています。
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/13_Function_Definition.html#section-13

ただし、その後の "関数名が不要です" は誤りです。
FunctionExpression では Identifier (関数名) がオプションであり、省略することも命名することも可能です。

var a = function b () { // 名前付き関数式
 alert(b); // b はこの関数内でのみ呼び出せる
};

名前付き関数式は IE8- でスコープが漏れるバグがありますが、関数名を付けるとデバッグ時に有効だそうです。
また、再帰処理するときにも有効です。
ES5 の Strict Mode で arguments.callee を使えなくて困っている人は命名しておけば便利だと思います。

# サイ本は比較的仕様に忠実な方ではありますが、完全ではありません。
# ECMAScript として見ればおかしいと感じるところはいくつかあります。
# 「function文」や「関数リテラル」はその一つで ECMAScript にない用語です。
# 説明の便宜上、あえてそう表現しているのでしょうが、その用語が仕様から来ているのか便宜上のものなのかを認識してから判断しないといろいろ混乱するところが出てくると思います。
488 : Name_Not - 2011/12/24(土) 14:57:21.98 ID:??? (+3,-30,-28)
>>487
外からも呼び出せるぞ
var a = function b() {
console.log('OK');
};
a(); // "OK"
b(); // "OK"
489 : 457 - 2011/12/24(土) 14:57:59.62 ID:??? (+75,+13,-20)
ちょっと疑問なんですが
aの場合はコンストラクタはどう書けばよいのでしょうか?
490 : Name_Not - 2011/12/24(土) 15:01:17.47 ID:55qjskI1 (-3,-7,-41)
>>489
いろいろ勘違いしている気がする
コンストラクタ関数は普通にfunctionで書くしかなかろう。
491 : think49 - 2011/12/24(土) 15:06:50.26 ID:??? (+34,-30,+0)
>>480
Syntax は確かに構文解析をする場合にも使います。(JSLint とかコード圧縮器とか)
覚えていて便利だと感じるのはその構文が ECMAScript に準拠していて動くのか、実装依存で動いているのか判断する場合でしょうか。
例えば、関数名としてどの文字が許されているのかを知りたい場合には Identifier を読みます。
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#Identifier

メモリリークは実装(ブラウザ依存)の話なので仕様(ECMAScript)上の問題とは切り離して考える必要があると思います。
仕様に絡めるならhttp://msdn.microsoft.com/ja-jp/library/bb250448%28v=vs.85%29.aspx で説明されている疑似リークを出来るだけ発生させない(クロージャを作らない)ことが重要ですが、厳密にはメモリリークしてませんよね…。
「循環参照によるメモリリークのバグは混入しやすいから循環参照は形成しないようにしよう」とアドバイスを受けることはあります。

>>488
IE8- で実行していませんか?
Google Chrome 16 では "ReferenceError: b is not defined" になります。
http://d.hatena.ne.jp/think49/20110521/1305959222
492 : Name_Not - 2011/12/24(土) 15:06:54.50 ID:??? (-1,-29,-14)
Object.create()が使えるならそれで
493 : Name_Not - 2011/12/24(土) 15:08:20.12 ID:??? (+68,+29,-23)
>>489
データとメソッドをまとめるならオブジェクト指向でbの書き方なんだよ。
aはただの集合体に過ぎない。
494 : Name_Not - 2011/12/24(土) 15:09:22.48 ID:??? (+62,+29,-62)
chromeのjavascriptのコンソールで入力するたびにフォーカスがコンソールから外れちゃうんですけど
ショートカットかなにかでコンソールにフォーカスを合わせる方法ありませんか?
いちいちマウスでコンソールをクリックしないといけないのが面倒くさいです
495 : think49 - 2011/12/24(土) 15:11:31.65 ID:??? (+99,+29,-52)
>>491の補足。
メモリリークではありませんが、「クロージャを多量生産しない」とはよくいわれますし、賛同します。
必要以上にメモリを占有させる必要はありませんから。
496 : Name_Not - 2011/12/24(土) 15:18:19.94 ID:??? (+13,-30,-73)
>>481

var Ningen = function(name, age){
this.name = name;
this.age = age,
this.func = function(){ return this.name + "は" + this.age + "歳です。";};
};

var sakamoto = new Ningen("坂本", 16);
alert(sakamoto.func());
497 : Name_Not - 2011/12/24(土) 15:20:37.19 ID:??? (+3,-30,-129)
var a = { // オブジェクト初期化子
name: "坂本",
age: "16",
func: function (x) { return x * 100; }
};

function b () { ; } // コンストラクタ関数
b.prototype = {
name: "坂本",
age: "16",
func: function (x) { return x * 100; }
};

var c = new Object();
c.name = "坂本";
c.age = "16";
c.func = function (x) { return x * 100; };

単一オブジェクトを生成するなら、a
複数オブジェクトを生成するなら、b
c は不要
498 : Name_Not - 2011/12/24(土) 15:27:12.54 ID:??? (+10,-29,-8)
ECMAScript 5がいま話題じゃないですか
これってどのブラウザが対応しているかわかりますか?
499 : Name_Not - 2011/12/24(土) 15:28:04.80 ID:??? (+18,-7,+1)
>>498
>>3のリンク先へ
500 : Name_Not - 2011/12/24(土) 15:41:20.76 ID:??? (+96,-30,+0)
jQueryのthickboxで開いたiframeの中でもjQueryを使っています。
ChromeとIEでは正常に動くのですがFireFoxで以下のエラーがでます。

c.defaultView.getComputedStyle(h, null) is null
[このエラーでブレーク] (function(a,b){function cw(a){return f...a:a+"px")}}),a.jQuery=a.$=f})(window);
jquery.min.js (16 行目)
jQuery is not defined
[このエラーでブレーク] g[c][1].apply(f.element,a)}},contains:...b.ui.isOverAxis(g,c,i)}})}})(jQuery);
jquery-ui.min.js (17 行目)
jQuery is not defined
[このエラーでブレーク] })(jQuery);
jQuery...kbox.js (155 行目)
$ is not defined
[このエラーでブレーク] $(document).ready(function(){
addres...s=true& (78 行目)

iframeを読み込んだとたんにこのエラーが出てiframe内のjavascriptが
動作しません。
確かFireFoxで最初に動き出してChromeでデバッグしてるうちに
いつの間にか動かなくなっていました。
ちょっとしたことのような気がするのですが、チェックポイントなど
教えていただけると嬉しいです。
よろしくお願いします。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について