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

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

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

851 = :

ひょっとして、>>812がいいたかったのは>>846だったのかな
一応、無名関数による解決法ではある
(bindを全否定してまで>>790に薦める書き方には思えないけど…)

852 = :

このベンチマークでExtJSが圧倒してるのはなんでなの?
http://jsperf.com/mojo-of-dojo-and-jquery/75

853 = :

extjsって有料なのか
宣伝じゃね

854 = :

Ext JSはエラーになってるような気がする
だから結果は正しくなさそう

855 = :

なるほど エラーの可能性が高そうですね

856 = :

>>845
この件ですが、正規表現でinnerHTMLを置換すればいいだけでした

857 = :

>>851

function Index() {
var that = this;
$('[id="htmlForm:button1"]')
.click( function () {
that.say();
});
this.count = "aa";
}

Index.prototype.say = function () {
alert(this.count);
};

thatを使う書き方はこう書くのが正しい。

858 = :

>>857
>>846の方がスコープが狭い分だけいいと思うけどねえ
「こう書くのが正しい」と主張するほどいいとは思えない
せめて、>>846の何が誤りで>>857がどう正しいのかを説明してほしい

ところで、それが>>812のいいたかった事?

859 = :

アロー関数使えばいいんじゃね

860 = :

>>858
まずオレは812ではない。
>>846は見間違えていた。>>846でも構わない。
ただ「スコープが狭いからいい」とは思わないがここは割とどうでもいい。

bindを使う場合とthatを使う場合では本質的に大きな違いがある。
>>790にbindを教えて終わりにするのは「バカはbindでも使ってろ」と言っているようなもの。
bindを使うなら次のコードでもいい。

var say = function () {
alert(this.count);
};
function Index() {
$('[id="htmlForm:button1"]').click(
say.bind(this)
);
this.count = "aa";
}

これより、thatを使った方がオブジェクト指向的には正しいということは理解できるだろう。

861 = :

「オブジェクト指向的には正しい」は違うな。>>846,857にしてもまだこんな書き方はしないと思う。

862 = :

俺はオブジェクトをビルドする処理を書いて
メソッドの関数名を特定の名前にしておくと、
親オブジェクトをプロパティーとして持たせるようにしてる
こうするとハンドラの中から本来の親オブジェクトに簡単にアクセスできるので
bindとかする必要がなく便利である

863 = :

以前は子オブジェクトが親オブジェクトを分からないなんてアホすぎるだろと憤怒してたけど
JSの仕組み上メソッドは誰の子にでもなれるわけだし、
実際に複数のオブジェクトに所有されてるかもしれないから、仕方ないんだよな

864 = :

こういうことね?

var a = {
foo: function () {
return this.val;
},
val: 'a'
};
var b = {
val: 'b'
};
b.foo = a.foo;
console.log(b.foo()); // b

Javaとか知ってると aが表示されんじゃないのって思ってしまうかもね

865 = :

>>860
これで全体を適当に匿名関数でラップしてやればsayがプライベート関数になる

866 = :

せいっ!!

867 = :

長渕乙

868 = :

http://takanamito.hateblo.jp/entry/2013/04/12/000357
別のファイルからstart()やend()を呼びたいときは
var utilities = new MYAPP.utilities();
utilities.start();
utilities.end();
ってこのブログで書いてあるのですが、
MYAPP.utilitiesてnewなしで呼べるように定義されていますが、
この別のファイルからstart()メソッドやend()メソッドを呼ぶときに
何故newが必要なのでしょうか?また、別のファイルから呼ぶ状況は
どういったことを指しているのでしょうか?

869 = :

>>868
せいっ!

870 = :

>>868
本人に聞くのが確実だと思うのだけど
(他人のコードを本人以外に聞くのは不確実でしかないのに、この手の質問がなくならないのはなぜなのか)

871 = :

javascriptの正規表現で質問です。無理かもしれないですが
例えば
var hoge ="12345";
を使ってこれらの文字列の間に半角空白を含めた
var str ="1 2 3 4 5"
を検索した時マッチさせたいのですが変数hogeの中身が分からなかった場合どうやって記述すればいいんでしょうか?
var reg="";
for(var i; i<hoge.length; i++){
   reg +=hoge.slice(i,i+1)+' *';
}
var r =new RegExp(reg)
r.exec(str)

とやってもダメでした

872 = :

>>871
i が初期化されていないのは誤記としてもそれだと
1 *2 *3 *4 *5 * のように最後に * が付いてしまうぞ
hoge.split('').join(' *') とすれば簡単

目的によっては、検索対象の文字列を加工してから検索する方法も使える
str.replace(/ +/g, '').indexOf(hoge);

874 = :

インスタンスを大量に作る場合で
使用率が低いプロパティーを作ると、メモリがもったいない気がします
_hoge
というプロパティーがあり、それがインスタンスのうち1%くらいでしか使われないと、
残り99%は無駄にメモリを専有することになります
使わない時は削除するとか、
prototypeにテーブルのようなものを作って、そこで管理するとか対処法はあるかと思いますが
どうやってますか?

875 = :

>>874
そのプロパティがどんだけメモリ食ってるか知らんが単なる数字とかだったら気にするだけ無駄
無駄な画像を削除するとかの方が劇的にメモリを節約できる
ただ、デカいプロパティの場合は null で初期化しておいて、適宜 new するのが常套手段
ちなみに null の初期化は必須
undefined のまま放置してるとエラーになったときに未初期化なのかどっかから undefined が
伝搬してきたのか不明になる

876 = :

>>784
> 使用率が低いプロパティーを作ると、メモリがもったいない気がします

作る時間のほうが時間のほうがはるかにもったいないです。
1バイトのメモリ = 0.000001 円
あなたが1分働いた給料10円

877 = :

>>874
コンストラクタ後にプロパティを削除するのは最もやってはいけないこと
オブジェクトがhidden classから外れると逆にメモリを食ってしまう
どうしても必要ないプロパティを付けたくないのならサブクラスを作る

因みにnullで初期化したりしてはいけない
型推論を困惑させ、脱最適化が起こる
初期化しないか、するなら代入する型で初期化すること
型というのはDateならDate、smi穴なしArrayならsmi穴なしArrayでないといけない

脱最適化は1回ならいいが、関数やオブジェクト単位で2回、3回と起こると永久的に最適化されなくなる

878 = :

>>876
作る時間よりもソフトウェアの総使用時間の方がはるかに大きい
はい論破

879 = :

>>875
プロパティはbooleanです
インスタンス数が万単位になる可能性があるので気になりましたが
確かに画像比べると大したことないかもしれません
ありがとうございました

880 = :

>>877
コンストラクタ内で初期化すると最適化されると言う記事は見たことがありますが
型まで指定するとは知りませんでした
ありがとうございました

881 = :

今まで恥ずかしくて質問できなかったんですがリファレンスサイトにある
文字列.slice(開始位置 [,終了位置] )
の[]ってどういう意味があるんですか?

882 = :

省略もできるという意味

883 = :

省略できるという意味だったんですか。ありがとうございます
しかしそれだったら
slice(開始位置 , [終了位置])になりませんか?
なんでコンマを跨いで 開始位置 [ , 終了位置 ] )になってるんでしょうか?

884 = :

そのマンコも省略できるって事

885 = :

終了位置だけを省略してコンマを残した
開始位置,
だとエラーになるから。
省略する時にはコンマも同時に省略しないと駄目だよっていう意味

886 = :

, [終了位置]って思う意味が分からないw

887 = :

なるほど、カンマだけになったらバグが発生しちゃうのでそこまで考えてくれたんですね
とってもスッキリしました
これからは気持ちよくリファレンスサイト見る事が出来そうです

888 = :

「バッカス・ナウア記法」とか調べておくと幸せになれるかも。

889 = :

あるオブジェクトが何のインスタンスか調べたいとします
instanceofは比較対象の型を決めうちで調べますが、
プロトタイプチェーンにより継承しているすべての型を知りたい時は
どうしたらいいでしょうか

892 = :

なるほど
順番も見ているのですね
ありがとうございました

893 = :

業務アプリでよく使われる、「ファンクションバー」はどのように実装するのがベストですか?

ちなみ、自分がやっている業務アプリでは、F1キーをクリックすると
予めスーパクラスで宣言されていたメソッドが呼び出される仕組みになっています。

public override function f1Check():String { return "メッセージ"; /* 文字列をreturnすると、ダイアログに表示される */ }
public override function f1Click():void { /* 表示されたダイアログでYesをクリックされた時だけ、このメソッドが呼び出される */ }

894 = :

>>877
そんな細かい最適化なんかよりデバッグのしやすさの方が100倍重要
undefindが伝搬して原因不明のバグに悩まされるより確実にnullで初期化する事を徹底すべし
勿論オブジェクト以外は0とかもあり得る

896 = :

undefindになる一番の原因は未初期化変数のアクセスと配列の範囲外アクセスだと思う
配列も含めて全ての変数をundefined以外の値で初期化しておけば
途中でundefinedを見掛けた時に確実にどこかがバグってると分かる
初期化せずにundefinedのまま放っておく癖がつくと
undefinedを見掛けてもスルーする癖がついてしまうというだけのこと

897 = :

>>896
それだと、本来バグとして検出できるものが
検出できなくなるじゃん。

・変数定義するときは必ず代入する(代入したら値はなるべく変更しない)
・配列のアクセスには、forEach系を使う

こうでしょ?

899 = :

ちなみに、
var a = -1;
if (hoge) a = b[c]; // bの中身は全てundefined以外
だと、cが範囲外アクセスってのがすぐ分かる (cもundefined以外で初期化しておく)

900 = :

入力された文字によってテキストエリアのサイズが変わった時に発生するイベントなんてないですよね?
onsizechangeみたいなのがあればいいんですが。
onkeyupやタイマーでサイズ変更を検出するしかないでしょうか?


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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