問題タブ [ecmascript-5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
8 に答える
1554 参照

javascript - (オープン ソース) JavaScript プロトタイプ OO の例

バウンティ 編集:

純粋なプロトタイプ OO パラダイム (Self を考えてください)で記述されたコードを探しています。プロトタイプの OO と従来の OO の混合物ではありません。一般的な OO ラッパーは見たくありませんが、単にプロトタイプの OO 手法を使用し、プロトタイプの OO 手法のみを使用するだけです。

参照関連の質問:

JavaScript の典型的なオブジェクト指向

上記の質問では、主に焦点を当てました

このようなプロトタイプの OO を記述できますか?

コンストラクターと初期化ロジックが必要ですか、代替手段は何ですか?

新しい質問:

基本的に、大規模なオープン ソース プロジェクトで javascript プロトタイプOO の良い例はありますか?

説明:

プロトタイプ OOの意味を明確にする必要があります。

  • クラスはありません。オブジェクトしかありません。
  • クラスの概念のエミュレーションはまったくありませ。ここでも、新しいオブジェクトを作成するためのオブジェクトとオブジェクトのクローンしかありません。

プロトタイプ OO のさらなる説明:

JavaScript のプロトタイプの OO と従来の OO エミュレーションの違いは、非常にグレーな領域です。古典的なオブジェクト指向を避けることを重視しているわけではありません。私は、古典的な OO エミュレーションとプロトタイプ OO の (おそらくより最適な) 組み合わせを学ぶことなく、それ自体でアカデミックな方法でプロトタイプ OO を学びたいと考えています。

これが、私がクラスを「禁止」する理由です。これらの手法を純粋な方法で確認し、独自の OO ツール キットを拡張できるようにするためです。

例:

jQuery などの一般的な例は、2 番目の基準を満たしていません。オブジェクトは、1 つのjQuery大きなクラス エミュレーションです。既存のオブジェクトを複製するのではなく、クラスから新しいオブジェクトを作成することに重点を置いています。

「純粋な」プロトタイプ OOの使用例を実際に知っていれば、お見せしたでしょう。JavaScript OO の 99% は、古典的なエミュレーションの影響を大きく受けていると思います。

ボーナスポイント

もしも

  • 十分にコメント/文書化されています
  • 単体テストあり
  • github にあります。

また、単純な Hello World アプリケーションを超えるプロトタイプの OO コードの作成方法に関する記事/チュートリアルと例も受け付けます。

0 投票する
1 に答える
1757 参照

javascript - Chrome JavaScript バインド関数の不一致

about:blank を参照した場合は、スクリプト コンソールを開き、次のように入力します。

応答は、x.bind がネイティブ コードで実装されていることを示しています。

ただし、Web アプリのページでスクリプト コンソールを表示して同じステートメントを実行すると、x.bind がネイティブに実装されていないように見えます。

この実装がこのように切り替わる原因は何ですか? これを引き起こす可能性のあるJavaScriptで設定している可能性のあるものはありますか? ページで jQuery を使用していますが、影響はありますか?

0 投票する
4 に答える
5845 参照

javascript - Object.create()またはJavaScriptでnewを使用する理由はありますか?

私はnewこれまでJavaScriptでキーワードを使用してきました。私はこれまで読んでいましたがObject.create、代わりにそれを使うべきかどうか疑問に思います。よくわからないのは、構築コードを実行する必要があることが多いためObject.create、関数の実行がトリガーされないため、どのように機能するのかまったくわかりません。

誰か教えてもらえますか?その場合、Object.create代わりに使用する必要がありnewますか?

0 投票する
5 に答える
21818 参照

javascript - Object.prototypeJavaScriptの拡張

私はこれが大丈夫かどうか尋ねていません:

これは、混乱していることを考えると、ほとんどすべての人にとって悪と見なされていますfor(var i in obj)

本当の質問

無視する

  • 能力のないブラウザ(サポートしていないブラウザObject.defineProperty
  • プロパティの衝突またはオーバーライドの可能性

あなたが信じられないほど便利な方法を持っていると仮定すると、これは間違っている/非倫理的であると考えられていますか?

上記が非倫理的であるとあなたが信じるなら、なぜ彼らはそもそもその機能を実装するのでしょうか?

0 投票する
1 に答える
1274 参照

javascript - Javascript - DOM プロトタイプ要素の getOwnPropertyDescriptor & defineProperty

IMG タグの「src」属性で読み取り/書き込み操作をキャプチャしようとしています。その目的のために、私は HTMLImageElement オブジェクトで getOwnPropertyDescriptor & defineProperty 関数を使用しようとしていました (img ごとに定義することを避けたいため) getOwnPropertyDescriptor に関して私が見たもの:

上記の proto 要素の defineProperty に関して、getter/setter 関数は Chrome でのみ実行されることがわかりましたが、期待したときに実行されず、getter 関数内の「this」が DOM ウィンドウのプロトタイプであることがわかりました。このための私のテスト コードは http://jsfiddle.net/yoav/tUekJ/にあります。

この場合、getOwnPropertyDescriptor は機能しますか? JS が "src" 属性にアクセスしたときに getter/setter 関数がトリガーされることを期待する必要がありますか?

ありがとう!

0 投票する
1 に答える
133 参照

javascript - JavaScript で完全に正確な値を取得するには?

重複の可能性:
巨大な整数 JavaScript ライブラリ

2^1000の正確な値が必要だとします。全体の値を取得するにはどうすればよいですか? 乗算が完了するたびに文字列に格納するかもしれませんが、それでも最終的には 10 桁を超えます! 方法はありますか、または ECMAScript はこれをサポートしていませんか?

0 投票する
3 に答える
12809 参照

javascript - JavaScript (ECMAScript 5) チュートリアル

ECMAScript 5 は現在、ほとんどの最新ブラウザーでサポートされていると聞いています。そこに良いチュートリアルはありますか?私は自分自身を探してみましたが、何も見つかりませんでした。そこにあるのはES5のドキュメントだけですか?主に、新基準で減価償却されたものを知りたいです。これらを回避すれば、ES5 に移行したときに自宅にいるように感じることができ、減価償却されたものを見逃すことはありません。

0 投票する
4 に答える
3357 参照

javascript - nullと未定義およびJavaScriptでのそれらの動作

したがって、JavaScriptでのnullとundefinedの実装に関する大きな議論/討論/議論の後、実装の背後にある理由と、状況によっては異なる理由を誰かに説明してもらいたいと思います。私が困っているいくつかの特定のポイント:

  • null == undefinedに評価しますtrue
  • null + 11に等しいがundefined + 1等しいNaN
  • if(!null)trueとif(null)評価され、falseと評価されますが、falseと評価null == falseされます。

仕様を読み、結果がどのように達成されるかを知っています。これが仕様であることを示すパラダイムと理由を探しています。これらのポイントのいくつか、特に最初のポイントを考えると、2番目のポイントは非常に一貫性がないと感じています。

0 投票する
3 に答える
363 参照

javascript - Function.bind("foo").call("bar") がこれを常に "foo" と呼ぶのはなぜですか?

JS で理解できない動作を経験しました。いくつかの引数を指定して String.prototype.replace を呼び出すメソッドを作成したかったため、次のように思いつきました。

私は、置換を取得するために文字列をスローするだけでよい関数を取得すると推測しました。代わりに、常に初期this値 (この場合fooは ) が返されます。

今私の質問は次のとおりです。

  • なぜJSはそのように振る舞うのですか?bind は実際に何を返し、どのようにしてthis-parameterを取得でき.call()ますか?
  • ラッパー関数を作成せずにやりたいことを行う別の方法はありますか?
0 投票する
2 に答える
13863 参照

javascript - Function.prototype.bind

EcmaScript-5Function.prototype.bindの実装について非常に興味深い質問があります。通常、bindを使用する場合は、次のようにします。

かっこいいですが、これを行うとどうなるでしょうか。

Function.prototype.bindの実装方法に関しては完全に論理的な動作であることを理解しています(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind)。しかし、実際の状況では、それは完全に役に立たない行動ですよね?問題は、それがバグなのか機能なのかということです。それがバグなら、なぜそれはどこにも言及されていないのですか?それが機能である場合、ネイティブの「バインド」実装を備えたGoogleChromeがまったく同じように動作するのはなぜですか。

より明確にするために、私の意見ではもっと理にかなっていることですが、Function.prototype.bindを少し異なる方法で実装するコードスニペットを次に示します。

だから今これを試してみてください:

私の意見では、「これ」を置き換える方が理にかなっています...

それで、皆さんはそれについてどう思いますか?