2011-01-10 12 views
3

私は好奇心が強い:ECMAScript5仕様がstrictモードで複数の定義済みオブジェクトのプロトタイプのプロパティを締めていない理由を誰もが知っていますか?たとえば、hasOwnPropertyの定義方法に関する情報がないようです。私はそれを再定義しようとしました(そして、FF4ベータ版のコードをテストしました)、私はこれを取り除くことができました。私は何も悪いことをしなかった場合、これは誰もがはまだ ...この上hasOwnPropertyをとECMAScriptの5 strictモード

考えをObject.prototype.hasOwnPropertyプロパティを再定義し、実際に作業性のためにそれに依存しているすべてのコードをネジことができることを意味しますか?

編集:私はスペックによって掘ると、もう少し情報...

私は以下のコメントを入れてきたように、あなたが本当にによりそのメタデータにstrictモードでのObject.prototypeを変更することはできません(Writable、Enumerable、Configurableがすべてfalseに設定されています)、FF4ベータ(テストを実行するために使用しています)が例外を生成します。

ありがとうございました。

+0

質問は次のとおりです。組み込みオブジェクトはデフォルトで封印されていますか?私はまだES5を掘っていないので、その質問に対する答えはわかりません。 –

+0

@ ime Vidasいいえ、組み込みオブジェクトはデフォルトでは封印されません。彼らの[Extensible]は 'true'に設定されているので、簡単にプロパティを追加することができます(15章を参照)。 AIUIの目的は、ESオブジェクトモデルを柔軟に保つことでした。絶対に重要な部分をロックするだけでした(グローバルな '未定義'、 'NaN'と' Infinity'プロパティは書き込み不可能、非設定可能です:)) – kangax

答えて

3

そして?もし私が望むのであれば、あなたのプロジェクト/サイトにこのようなコードを入れないでください。何か良いことをしないで、そういうことをしている馬鹿を見つけて、ボールでキックをするようにしてください。

私が意味する、私もTrue = Falseを行うことによって、任意のPythonの(2.xの)プログラムを台無しにすることができます。

あなたは決して馬鹿から保護することはできません。決して。それらを教育するか、または避けてください。あなたのスクリプトが匿名ラッパーにカプセル化した場合、このことの不可能を明確にするために

EDIT

(あなたが他のコードとそれを使用する場合は行う必要がありますように)"use strict"があなたのコードをローカルになります。

つまり、悪い馬鹿のコードでは、厳密なモードを使用していない場合、つまり、私がここで話し合っていない総馬鹿でない限り、ES3あなたの美しい厳密さは存在しません。

+1

"馬鹿、彼らはあなたのレベルにあなたをドラッグし、経験であなたを打つ " – qwertymk

+0

まあ、本当に。仕様を見ると、Object.prototypeには次の属性があります。Writable:false、enumerable:false、configurable:false。私もそれを変更しようとしたし、あなたがそれをしようとするとFFが例外を生成することに気づいた。 –

+0

@ルイス推測私は間違った言葉遣いを使用しました。私は単にそれからすべてのプロパティを削除することができます、 'Object'の' prototype'プロパティだけがオーバーライドできません。 –

関連する問題