最初に、私はこれがほとんどの実用的なJSアプリケーションではあまりお勧めできないと理解します。私はDSLを構築しており、JavaScriptの限界をテストしています(proxiesとreflectionのような新機能で拡大しているようです)。 var a = function(){}
しかし、いくつかのクレイジーな理由で、私は本当には、いくつかの任意のデータ(a.prototype = "blah"
)を格納するためにa
のprototype
プロパティを使用したい:JavaScript関数の `prototype`プロパティの名前を変更することはできますか?
は、私は新しい関数を作成するとします。だから、それを上書きするのは簡単だ
configurable: false
enumerable: false
writable: true
が、それは、関数の機能を台無しよ:
はFunction.prototype
のproperty descriptorはこれです。 new a()
を呼び出すと、そのように動作しません。理想的には、それを__prototype
などの名前に変更し、新しいインスタンスを作成するときにコンストラクタがprototype
ではなくそのプロパティを参照するようにする方法があります。
これは不可能だと私は疑いますが、ES6がこれを実行可能にするもの(代理人)を追加したかどうかはわかりませんか?フードの下で何が起こっているのかを理解しているJavaScriptプロフェッショナルがこれを手助けすることができれば素晴らしいだろう。
P.S. arguments
がconfigurable
またはwritable
ではないため、Function.arguments
と同じことをやりたいのですが、それは別の質問かもしれません。そこにコメントがありますか?
ES標準では*ハードコード化されていると思います。 http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-prototype。 – Andrey
'Object.create'を使ってプロトタイプを' __prototype'プロパティに設定したオブジェクトを作成する独自のcreate関数を作ることができますが、デフォルト* new *は常にコンストラクタで '.prototype'を探します – Andrey
ヒント! – JoeRocc