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

    私的良スレ書庫

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

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

    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
    601 : Name_Not - 2014/10/19(日) 05:16:46.42 ID:???.net (+52,+29,-9)
    >>600
    奇遇だね。この間循環参照が発生しても
    メモリリークになるから問題ないって結論が出たんだよ。
    602 : Name_Not - 2014/10/19(日) 05:17:21.39 ID:???.net (+57,+29,-11)
    間違えた。

    奇遇だね。この間循環参照が発生しても
    メモリリークになるないから問題ないって結論が出たんだよ。
    603 : Name_Not - 2014/10/19(日) 05:45:21.27 ID:???.net (+24,-30,-32)
    function foo(element, a, b) {
    element.onclick = foo1(a,b);
    }

    function foo1(a,b){
    return function() { /* 引数 a と b を使う */ };
    }

    これでよし
    604 : 592 - 2014/10/19(日) 09:12:19.47 ID:???.net (+11,-30,-51)
    >>598>>599
    いやあそれも不十分でしょう
    document.all = { __proto__: HTMLAllCollection.prototype };
    "all" in document // true
    document.all instanceof HTMLAllCollection // true
    606 : 598 - 2014/10/19(日) 11:28:51.33 ID:???.net (+11,-30,-63)
    >>604
    そこまで気にしていたら、document.all に限らず、既存のチェックが全て不十分だと思うけどなあ
    document.all ではないチェックの場合、typeof演算子以外にも何か対策してる?
    XMLHttpRequest とか querySelectorAll とか getComputedStyle とか
    607 : Name_Not - 2014/10/19(日) 11:31:43.76 ID:???.net (+64,+29,-21)
    そもそもそんなチェックすんの?しねーだろ
    lodashで何の問題もない
    608 : 592 - 2014/10/19(日) 11:54:21.55 ID:???.net (-17,-30,-88)
    >>606
    確かにそうだなw
    通常範囲だったらプロパティの書き換えまで考慮しないから、プロパティが存在するかどうかのチェックしかしてないね
    document.all を気にしすぎて実用性からかけ離れてしまった

    >>607
    document.all に関してはそう思います

    話を逸らして悪かったけど、>>527 が気にする問題点は document.all でなくて、
    Object (non-standard exotic and does not implement [[Call]]) の判定をいかにするかってことだよね?
    609 : Name_Not - 2014/10/19(日) 12:08:26.63 ID:???.net (+66,+29,-11)
    >>603
    それやっても、aとbを参照することになるよね?
    循環参照解決してないじゃんw
    610 : Name_Not - 2014/10/19(日) 12:09:06.75 ID:???.net (+4,-30,-28)
    >>608
    > Object (non-standard exotic and does not implement [[Call]]) の判定を

    それに当てはまるものって何?

    document.allしかないとかじゃないの?
    611 : Name_Not - 2014/10/19(日) 12:22:43.91 ID:???.net (+11,-23,-17)
    >>609
    >603ではないが、a, b がDOMでなければ循環参照しない
    612 : Name_Not - 2014/10/19(日) 12:32:15.29 ID:???.net (+30,-29,-28)
    element,a,b
    なんだからa,bはdomじゃないだろJK
    613 : Name_Not - 2014/10/19(日) 12:35:49.44 ID:???.net (+35,-30,-83)
    > function foo(element, a, b) {
    > element.onclick = foo1(a,b);
    > }
    >
    > function foo1(a,b){
    > return function() { /* 引数 a と b を使う */ };
    > }

    これよりもこっちのほうがよくない?
    汎用的だし。

    function foo(element, a, b) {
     setEvent(element, 'onclick', function() { /* 引数 a と b を使う */ });
    }
    614 : Name_Not - 2014/10/19(日) 12:36:21.88 ID:???.net (+59,+27,-15)
    >>612
    え? domかもしれないじゃんか。
    616 : Name_Not - 2014/10/19(日) 12:53:37.60 ID:???.net (+64,+27,-2)
    >>613
    それだとクロージャにelementが巻き込まれてる
    617 : Name_Not - 2014/10/19(日) 13:42:29.61 ID:???.net (+13,-29,-30)
    >>616
    巻き込まれないよ。

    element.onclickに代入するのは、別のコールバックだから。
    618 : Name_Not - 2014/10/19(日) 14:04:49.12 ID:???.net (+38,-30,-51)
    >>617
    616じゃないが、普通に巻き込まれてるぞ
    function foo(element, a, b) {
     setEvent(element, 'onclick', function() { /* element参照可能 */ });
    }

    あと、コールバックの意味を誤解していると思われる
    619 : Name_Not - 2014/10/19(日) 14:14:42.09 ID:???.net (+96,+29,-53)
    >>618
    え? DOMと循環参照しないようするに話でしょう?
    そりゃelementは参照可能だけど、
    DOMと循環参照しなければ何の問題もなくね?
    620 : Name_Not - 2014/10/19(日) 16:50:49.28 ID:???.net (+45,+10,-2)
    >>597
    ゲームで使われてる
    621 : Name_Not - 2014/10/19(日) 17:10:08.87 ID:???.net (+31,+13,-2)
    622 : Name_Not - 2014/10/19(日) 17:28:51.51 ID:???.net (+69,+28,-11)
    >>619
    elementを参照可能な事で循環参照が形成される
    循環参照のロジックを勘違いしていると思われる
    623 : Name_Not - 2014/10/19(日) 17:59:47.93 ID:???.net (+19,-30,-203)
    >>615
    そういえば実際にあったねw
    var hoge = new ActiveXObject("Excel.Sheet");
    typeof hoge // "unknown"

    lodash の isObject だと当然 false になっちゃうけど、>>538 なら期待通り true になった
    やはり >>538 が現時点で一番いい方法のように感じる

    あと、document.all は Object (non-standard exotic and does not implement [[Call]]) ではないよ
    オブジェクトであれば ToBoolean(hoge) は絶対 true だし、typeof hoge は "undefined" であってはいけない
    http://html.spec.whatwg.org/multipage/obsolete.html#dom-document-all
    "willful violation"(故意的な違反) とはっきり書いてある
    624 : Name_Not - 2014/10/19(日) 18:53:25.58 ID:???.net (+2,-30,-55)
    ActiveXObject("Excel.Sheet"); はJavaScriptの
    正しいObjectではないんだけど、
    これをObjectと判断するのは正しいの?
    625 : Name_Not - 2014/10/19(日) 18:55:22.09 ID:???.net (-1,-29,-5)
    isActiveXObjectっていうのを
    作るべきじゃないのかな?
    626 : Name_Not - 2014/10/19(日) 19:02:16.17 ID:???.net (-1,-30,-28)
    >>624
    え、Object (non-standard exotic and does not implement [[Call]]) ではないの?
    627 : Name_Not - 2014/10/19(日) 19:10:09.74 ID:???.net (+3,-29,-3)
    non-standardっていうのは非標準って意味だよ。
    628 : Name_Not - 2014/10/19(日) 19:15:45.41 ID:???.net (+8,-26,-26)
    まあ日本語訳する意味はあまりないと思うけど、ActiveXObject は >>627 の考える非標準のオブジェクトではないの?
    629 : Name_Not - 2014/10/19(日) 19:24:47.00 ID:???.net (-4,-30,-37)
    関連した話題だと思うけどさ、

    window.alert.toString();ってIE8だとエラーになるんだよね。
    Objectであるならば、toString()を持っているはずなんだけど
    エラーになる。

    >>538だとObjectってことになるが、
    こういうのを果たしてObjectといっていいのだろうか。
    630 : Name_Not - 2014/10/19(日) 19:27:48.98 ID:???.net (+14,-29,-88)
    >>628
    非標準の"オブジェクト" って書いてはいるけどさ、
    isObjectというのは、JavaScript標準のObjectであることを
    調べるために使うはずで、ObjectなのにObjectの条件を満たしていないっていうのは
    メソッドとしてはあってはならないことだと思うよ。

    まあ自分で作ったものなんだからisObjectはObjectではないものも
    Objectとして判定しますっていう仕様にしてもいいけどさ。
    631 : Name_Not - 2014/10/19(日) 19:28:30.10 ID:???.net (-1,-29,-15)
    Function.prototype.toString()使ってる奴はnoob
    632 : Name_Not - 2014/10/19(日) 19:30:39.55 ID:???.net (+7,-29,-22)
    ここにObjectが持っているメソッド一覧があるけどさ、
    Objectであるならば、Objectを継承していないとダメだと思う。
    当然toString()もここにある。
    http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object
    633 : Name_Not - 2014/10/19(日) 19:34:35.79 ID:???.net (+0,-29,-49)
    >>630
    「Object の条件を満たしていない」って具体的にどんなこと?
    ちなみに、ECMAScript で言えば、window も document も規定されていないオブジェクトだぞ
    634 : Name_Not - 2014/10/19(日) 19:37:48.79 ID:???.net (-1,-29,-31)
    >>632
    なにも継承しないオブジェクト
    Object.create(null)
    635 : 527 - 2014/10/19(日) 22:24:55.03 ID:LCRgvYGq.net (+30,+29,-75)
    >>623
    補足ありがとうございます。
    いわれてみれば、"unknown" には見覚えがある気がします。
    document.all に関しては見かけ上、undefined なだけなので実体は何になるのかな、というのが少し気になったのです。
    最も、故意に違反している以上、深く考えても仕方ないかもしれませんね…。
    636 : Name_Not - 2014/10/19(日) 23:47:50.13 ID:???.net (+57,+29,-39)
    実際には使いもしない機能に異常に拘る感じがundefined問題とかぶるな
    現実的にはlodashで何の問題もない
    637 : Name_Not - 2014/10/19(日) 23:54:35.09 ID:???.net (+88,+26,-70)
    firebugとかから直接関数を呼ばれたり変数に値を入れられたりするのを阻止する方法ありませんか?
    ソースコードを書き換えられるのは諦めますよ
    638 : Name_Not - 2014/10/20(月) 04:32:05.85 ID:???.net (+69,+29,-19)
    >>637
    無名関数の中にでも入れてしまうわけにはいかんの?
    639 : Name_Not - 2014/10/20(月) 08:45:31.47 ID:???.net (+4,-30,+0)
    >>629
    > window.alert.toString();ってIE8だとエラーになるんだよね。
    > Objectであるならば、toString()を持っているはずなんだけど
    少なくとも、ECMAScript 5 までは Object 型が Object のインスタンスを持つことを保証していません。
    同じく、関数が Function のインスタンスであることも保証していません。

    そもそも、仮に Object や Function のインスタンスであったとしても所属オブジェクトが toString を持っていたらそちらを参照するので、まずは該当仕様を確認すべきでしょう。
    window.alert は HTML 5 規定ですが、toString は未定義です。
    http://html.spec.whatwg.org/multipage/browsers.html#the-window-object
    従って、window.alert.toString がどういう挙動を示すかは実装依存となります。
    (IE8 リリース当時は window.alert は標準化されていなかったので、どちらにしろ IE8 の window.alert は実装依存ですが)
    prototypeに存在するメソッドを該当オブジェクトに適用させたい場合は Function#call を使用するのが一般的です。
    Function.prototype.toString.call(window.alert);
    Object.prototype.toString.call(window.alert);

    >>630
    > ObjectなのにObjectの条件を満たしていないっていうのはメソッドとしてはあってはならないことだと思うよ。
    なにやら誤解があるようですが、window.alert が Object 型であることは確かです。
    >>623で紹介されている new ActiveXObject("Excel.Sheet") も Object 型です。
    ECMAScript 6 では非標準(non-standard)の Object 型も規定しているので、これらは仕様の規定内です。
    641 : Name_Not - 2014/10/20(月) 15:49:22.87 ID:???.net (+10,-30,-194)
    IE8 の alert は、関数として実行できるのに、typeof alert == "object" ですよね。

    ES3 11.4.3 によると、
    「実装依存の オブジェクト/関数 は何を返してもいい」って書いてあります。

    ES5 11.4.3 と ES6 12.5.6.1 によると、
    「[[Call]] を持つオブジェクトは、"function" を返さないといけない」って書いてあります。

    IE8 の alert は、ES3 には準じているけど、ES5,6 には準じていないって認識であってますか?
    英語に自信がなくて、正しい理解なのか分かりません。
    教えてください偉いひと(*´ω`*)
    642 : Name_Not - 2014/10/20(月) 21:16:31.94 ID:???.net (+4,-30,-12)
    var hash = {};
    hashに入っているのは、Object?
    {} と new Objectは同じ?
    643 : Name_Not - 2014/10/20(月) 21:36:23.26 ID:???.net (+5,-30,-92)
    >>642
    同じです
    http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
    > The production ObjectLiteral : { } is evaluated as follows:
    > 1. Return a new object created as if by the expression new Object() where Object is the standard built-in constructor with that name.
    644 : Name_Not - 2014/10/20(月) 22:10:46.34 ID:???.net (-5,-28,+1)
    >>643
    thank you
    645 : Name_Not - 2014/10/20(月) 23:31:54.96 ID:???.net (+3,-30,+0)
    ■主要FAQ (全部はhttp://fiddle.jshell.net/vSqKr/33/show/ )
    Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
    A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
    Q2. document.write()でページ内容を追加したいのですが…
    A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
    Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
    A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
      DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
    Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
    A4. 「document.forms.myform.elements[変数名].value」でどぞ。
      JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
      グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
    Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
    A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
      IEでは要素オブジェクトのプロパティcurrentStyleを使う。
    Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
    A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
    Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
      「"...this..."」とか「function(){...this...}」ではうまく行きません。
    A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
      「function(x){return function(){...x...};}(this)」
    Q8. input type="file"の値を設定(参照)できないのですが…
    A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
    Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
    A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
    Q10. (function(global){~})(window)無名関数の中で循環参照を切る方法をおしえてください
    A10. 無名関数の最後にglobal = nullをして参照を切る
    646 : Name_Not - 2014/10/20(月) 23:39:25.79 ID:???.net (+122,+26,-3)
    ユニットテストってしてる人いますか?
    647 : Name_Not - 2014/10/21(火) 11:43:28.24 ID:???.net (+57,+29,-25)
    そもそもテストをしなくてもいいと思ったからそういう質問したんだよね
    何故テストをしなくてもいいと思ったのか説明しないと
    648 : Name_Not - 2014/10/21(火) 12:05:11.78 ID:???.net (+57,+29,-33)
    何故そう思ったんです?
    しなくていいと思ってたら質問すらしないと思いますが?
    649 : Name_Not - 2014/10/21(火) 12:52:35.22 ID:???.net (+57,+29,-17)
    ではしたらいいんじゃいでしょうか
    質問しなくてもわかってるんでしょ
    650 : Name_Not - 2014/10/21(火) 13:03:50.22 ID:???.net (+57,+29,-9)
    質問に対する回答以外の意見を書く人なんなんです?
    アホなんですか?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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