CoffeeScriptのプロトタイプの継承、特に特定のオブジェクトを継承するCoffeeScriptクラスの作成方法については、 Crockfordのオブジェクト関数に似た別のクラスではなく、基本的には、コンストラクタに渡された特定のオブジェクトから継承できるクラスを書くことです。残念ながら、setPrototypeOf
に頼ることなく、これは不可能かもしれないと私は信じています。代わりに私はおそらく同様のことをすることができる関数を解決しようとしています。今既存のオブジェクトを拡張するCoffeeScriptクラスのインスタンスをインスタンス化するユーティリティ関数
a = {foo: 1}
class Example
constructor: (@bar) ->
extendObject = (parent, Class, args...) ->
F = (anon...) -> Class.apply(@, anon)
F:: = Object.create parent
F::constructor = Class
new F args...
extendObjectMaker = (parent, Class) ->
F = (anon...) -> Class.apply(@, anon)
F:: = Object.create parent
F::constructor = Class
F
maker = extendObjectMaker a, Example
test1 = extendObject a, Example, 2
test2 = new maker 2
私は非常にあなたがしてとの定期的なコンストラクタ構文を使用することができる新しいクラスで、それが戻っている、本質的にどのようなことから、第二のアプローチを好む、下記二つの可能性があります。 extendObject
を使用して作成されたオブジェクトはによって返されたコンストラクタを使用して作成されたオブジェクトはと正しく識別され、F
として識別され、Example
のインスタンスではありません。
console.log test1 instanceof Example # True
console.log test2 instanceof Example # False
これらの関数がほぼ完全に同じコードを使用しているとすれば、なぜ私が異なる動作を示しているのかを理解するのが難しいです。だから、なぜtest2
がExample
として表示されないのか、誰かがそれをするために変更する必要があるのか分かりますか?
らしいです:) – Ven
ええと、それはなぜでしょうか? – rmehlinger
ああ、私はとてもすみません!モバイル上のStackoverflowは、別のスタック交換のWebサイトの配色を持っています! – Ven