[過去ログ] + JavaScript の質問用スレッド vol.84 + (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
417
(1): 2011/03/10(木)21:01 ID:??? AAS
>>415
更新したら、もういっかい getElementById() を呼ぶ必要があるだけだよ。
418: 2011/03/10(木)21:34 ID:??? AAS
あれ
大なり小なりって
どつちがどっちだ
419: 2011/03/10(木)21:36 ID:??? AAS
低レベルなレスはしなくてよろしい
420
(4): 2011/03/10(木)21:36 ID:eJR+lZ3V(1/5) AAS
javascriptのプライベートメソッドはどのように定義するべきなのでしょうか。
検索してみたところ、以下の方法が最も良いのではないかと思うのですが、もしより良い手段がありましたら教えてください。
var MyClass = function(){};
MyClass.prototype = (function(){

var privateMethod = function(){
//プライベートコード
};

return {
publicMethod : function(){
privateMethod.call(this);
省3
421
(2): 2011/03/10(木)21:40 ID:??? AAS
>>420
var MyClass = function(){
this.privateMethod = function(){}; // プライベートメソッド
};
422: 2011/03/10(木)21:43 ID:??? AAS
>>421
プライベートメソッドと言いつつ丸見えな件について
423: 410 2011/03/10(木)21:54 ID:??? AAS
>>417
できました!
すれ汚し失礼しました。
424
(1): 2011/03/10(木)21:58 ID:??? AAS
>>420
jsにはprivate修飾子なんてないから規約で決めるのが一番いいと思うね
this._method = function(){〜};
this._var = "hello";

プライベートには_を付けるというコーディング規約がある(PHPのzendとかいろいろ)
外部リンク[html]:framework.zend.com
425
(2): 2011/03/10(木)22:04 ID:??? AAS
>>420
var MyClass = function(){
 function privateMethod (){}
 this.publicMethod = function publicMethod () { privateMethod.call(this); }:
};
426: 2011/03/10(木)22:06 ID:eJR+lZ3V(2/5) AAS
>>424
ということは、javascriptでプライベートメソッドをエミュレートするときの慣習というか、常識となっている方法は名前規約なのですね。
回答ありがとうございました。
427: 2011/03/10(木)22:08 ID:??? AAS
>>421 >>425
これ動くのか?
428: 2011/03/10(木)22:08 ID:??? AAS
privateにしようとしてソースコードまでプライベートにしたら意味がない
429
(1): 2011/03/10(木)22:15 ID:eJR+lZ3V(3/5) AAS
>>425
リロードせずに見落としていました。こういうことですよね?
function MyClass (){
 var privateMethod = function(){
alert('hoge');
};
 this.publicMethod = function () {privateMethod.call(this);}
};

その方法はたしかに読みやすくプログラミングしやすいと思うのですが、そのメソッドはインスタンスごとに生成されてしまわないでしょうか。
メモリの観点からみるとprototypeを使って>>420よりも読みやすい方法があるといいのですが……。
430: 2011/03/10(木)22:19 ID:??? AAS
JavaScriptはクラスベースじゃありますん
431
(2): 2011/03/10(木)22:41 ID:??? AAS
>>429
privateMethod を共有していいのなら、privateMethod を外に出せばいい。

function MyClass (hoge){ this.hoge = hoge; return this; }
(function () {
 function privateMethod (){ alert(this.hoge); }
 MyClass.prototype.publicMethod = function publicMethod () { privateMethod.call(this); };
})();
new MyClass('foo').publicMethod();
432: 2011/03/10(木)23:17 ID:eJR+lZ3V(4/5) AAS
 >>431
なるほど!Callオブジェクトの中に閉じ込めるんですね!
そんな使い方ができるなんて……とても勉強になります。

ところで、そのコードで1点わからないところがあります。
MyClassで自身を返している(return this)のはなぜなのでしょうか?
削ってみても動くようなのですが、どんな意図があるのでしょうか。
433
(1): 2011/03/10(木)23:30 ID:??? AAS
new MyClass().methodA().methodB()な使い方をしたいんじゃない?
434
(1): 2011/03/10(木)23:33 ID:??? AAS
どう読んだらそうなるんだよww
435: 2011/03/10(木)23:39 ID:eJR+lZ3V(5/5) AAS
>>433
言いたいことはわかります。
jQueryによくある感じで、ドットでメソッドをつなげていくことを意識したのでしょうか。
ともかく回答してくださった方々、どうもありがとうございました!
436: 2011/03/10(木)23:59 ID:??? AAS
2000年頃に流行ったreturn thisは
VisualBasic畑のよくわかってない外人がmsdnのコラムで書いていたのが
コピペで広まったもの
1-
あと 565 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.011s