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

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

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

>>548の訂正
(function(){
function Person(){
console.log(this); ・・・ (1)
}
var a = new Person();
var b = Person();
console.log(a); ・・・(2)
console.log(b); ・・・(3)
}())

出力結果

Person {} ・・・ (1) new Person()
Window  ・・・ (2)
Person {} ・・・ (1) Person()
undefined ・・・ (3)

552 = :

newの付け忘れとかでこうなった場合、
>obj.foo(1, 2, 3) という呼び出し方をすれば、 . の左側が第0引数になる。
だけの解説だとわかりにくいんじゃないかなと思ったんだよね

553 = :

>>548の再訂正

(function(){
function Person(){
console.log(this); ・・・ (1)
}
var a = new Person();
var b = Person();
console.log(a); ・・・(2)
console.log(b); ・・・(3)
}())

出力結果

Person {} ・・・(1) new Person()
Window  ・・・(1) Persion()
Person {} ・・・(2) aの中身
undefined ・・・(3) bの中身

554 = :

>>552
その他の説明のほうが、ルールが複雑だと思うけど?

[ここ] foo(1, 2, 3)

foo([ここ], 1, 2, 3)

こう解釈されるってだけ。
obj.foo(1,2,3) → foo(obj, 1, 2, 3)
new foo(1,2,3) → foo(新規作成, 1, 2, 3)
foo(1,2,3) → foo(なし, 1, 2, 3)

この基本系+第0引数を自由に設定できるcallとapplyが存在する。

実はPerlも似たような解釈をする。
この見えない第0引数のthisっていうのは、昔のTurboC++3.0のマニュアルに
C++の動きの解説としてのってたんだよな。
それしってるからJavaScriptもPerlも内部的には同じように処理してるんだって思ってる。

555 = :

多分初心者はこのthisはなんなんだー?って思うだろうけどさ、

function foo() {
  function bar() {
    function baz() {
      console.log(this); ←このthis
    }
  }
}

第0引数を補完してやって、こうすれば

function foo(this) {
  function bar(this) {
    function baz(this) {
      console.log(this); ←このthis
    }
  }
}

thisはbazの第0引数として渡されたもの、
つまりbazの呼び出し方で決まるってわかるでしょ?

556 = :

addEventListenerとかjQueryのonとかで

var a = 1; ・・・(1)
console.log(this); ・・・(2)
$(element).on('click', function() {
  console.log(a); // (1)と同じ
  console.log(this); // (2)とは違う。
})

thisどうなってるんだ!?っていうのも

var a = 1; ・・・(1)
console.log(this); ・・・(2)
$(element).on('click', function(this, a) {
  console.log(a); // (1)とは違う。
  console.log(this); // (2)とは違う。
})

こう考えればいい。ついでに無名関数の引数にaを追加したが
こうした場合、引数のaで(1)が隠される。これはだれでも理解してると思うが、
このaと同じことが、thisに関しては常に成立している。なぜなら見えない第0引数が存在するから。

で、thisとaが実際に無名関数内でどうなるかは、呼び出す側の仕様で何を渡すかで決まる。

557 = :

確かにthisだけだと「見えない第0引数」という解説のほうが簡潔でわかりやすいね
この原則を認識してると>>541はちょっと筋が悪い解説にみえる

559 = :

種類が問題なわけじゃないからな
任意に設定される、というところが一番重要

560 = :

(function(){
function f(a, b){
return b[0] > b[1];
}
var s = f(function(x) { return (a, b); }, [0, 5]);
console.log(s)
}())

これってクロージャになってますか?

561 = :

なにこにバカの集まり

562 :

>>535
全く似てないよー

そんで他言語の覚えがあるなら
オライリーのサイ本が良いと思うよ

サイトはこれってものはアレだけど
prototypeについてを調べると良いと思う

563 = :

サイボンってネットで無料で見れますか?

564 = :

>>561
悔しいのうww

565 = :

こにバカ

567 :

thisは恣意的に設定されてるだけって言ってるじゃん
そう決められてるからそうなるだけのこと

568 = :

バグだ

569 = :

まあでも strictモードのundefinedにするってのが理にかなってはいるね
ここ.aaaa(); のここの部分が無いわけだから

ググればわかるけど、非strictモードではthisがnullやundefinedだったばあい
グローバルオブジェクトに変換しているとのこと
(>>566で aaaaa.call(null); ってするとwindowが表示される)

570 = :

思い込みでおかしい宣言する人は仕様書を一から熟読するべき
決まってるものをおかしいいわれても、おまえがおかしいとしか言いようがない

571 = :

1)Number.isNaN(100) // false
2)Number.isNaN("abc") // false
3)isNaN(100) // false
4)isNaN("abc") // true

なんで2番めのがfalseになるんですか?

572 = :

>>571
NaNではないから
むしろ、なぜ true になると思った?

573 = :

文字列なのにNaNになると思いました
4がtrueなのに何故2はfalseになるのかよくわかりません

574 = :

>>573
Number.isNaN と isNaN が同じ機能を提供していると認識違いしてるんだろ
思い込みで決め付ける前に「自分が思う前提が間違っているかもれない」と捉え、自分から調べる努力をしろ

上の this の質問もそうだが、自分の考えが正しいと信じ込んでる分、いくら仕様だと説明しても理解することもしない、大変性質が悪い
自分で調べた上で「~では~と書かれており、自分は~と認識してるんですが、合ってますか?」と質問するぐらいでちょうどいい

Number.isNaN()
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isnan
isNaN()
http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-isnan-number

575 = :

おれ、ここで先輩方にぼこられてからスキルが上がった気がします!

576 = :

>>574
分かっている人に聞いたほうが早いと思って・・・
実際そうでしたしw
ありがとうございました

577 = :

>>576
問題ないよ
どんどん聞けばいい
答えるのも答えないのも自由なんだから

578 = :

>>577
どうも^^

579 = :

こんなところの答えを信用するかどうかも質問者次第だけど

580 = :

A級以上の質問者は回答の質を見分けられるので問題ないよ

581 = :

まあそうだな
スルーしてるけど変な回答もあるし

583 = :

var Class = function(){
var klass = function(){
this.init.apply(this, arguments);
};
klass.prototype.init = function(){};
// プロトタイプにアクセスするためのショートカット
klass.fn = klass.prototype;
// クラスにアクセスするためのショートカット
klass.fn.parent = klass;
// クラスプロパティを追加します
klass.extend = function(obj){
var extended = obj.extended;
for(var i in obj){
klass[i] = obj[i];
}
if (extended) extended(klass);
};
// インスタンスプロパティを追加します
klass.include = function(obj){
var included = obj.included;
for(var i in obj){
klass.fn[i] = obj[i];
}
if (included) included(klass);
};
return klass;
};

584 = :

ステートレスJavaScriptにこのようなコードがあります
extendはクラス拡張、includeはプロトタイプ拡張です
しかしプロトタイプ拡張=includeがピンと来ません
どっちもextendだと区別できないので別の言葉にしてるだけなら、
extendPorototypeとかにした方がいいんじゃないかと思うのですが、どうなんですか?

586 = :

それjsでやる意味がわからない

587 = :

>>586
分からないなら黙っとけや

588 = :

>>584 == >>587

589 = :

>>588
それが正しいとして、だから何なんだ?
意味のないことを言って反論にしたつもりにでもなってるのか?

590 = :

>>583の件ですが、
extended、includedというコールバックを指定していますが
これだとコールバックまでextendやincludeされますね
コールバックが追加される必要はないので、別引数で渡した方がいいですよね・・
それとも何かメリットあるんでしょうか?

591 = :

>>588
こいつ何言ってんだと思ったら透視してみたのか
それがなんなんだよ
隠してねーよバーカ

592 = :

図星w

593 = :

当てられてムキになるくらいなら、隠せばいいと思います

594 = :

レス番透視は自分で馬鹿でーすって言ってるようなものだからやめた方がいいぞ
C級以下の知性の持ち主がやること

595 = :

>>593
アスペ乙
無意味なレスをドヤ顔で書ける頭の悪さにイラッとしたわけ

596 = :

>>335の件ですが、
ステートフルJavaScriptに

あるオブジェクトのプロパティを取得しようとすると、
まずそのオブジェクトがローカルに保持しているプロパティが検索されます。
該当するプロパティが存在しない場合は、
そのオブジェクトのプロトタイプオブジェクトが保持しているプロパティが検索され、
そこでも存在しない場合はプロトタイプオブジェクトのプロトタイプオブジェクトが検索されます。

とありました。
つまり__proto__はプロトタイプオブジェクトと言えそうです。
obj.prototypeすなわちプロトタイププロパティ、≠プロトタイプオブジェクト
なところが、
JavaScriptにおける継承の理解を困難にしている大きな原因ではないでしょうか

597 = :

>>584は"ステートレス"JavaScriptを目指してるんだろうから、extendeもincludeも理解しなくていいよ

599 = :

>>597
意味不明

600 = :

>>595
相手はお前をイラっとさせようと思ってるんだろうから、そんな沸点が低いと思う壺だろw


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

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


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