問題タブ [prototypal-inheritance]

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 投票する
1 に答える
588 参照

inheritance - node.jsとブラウザ(IE6を含む)の標準継承システム?

node.jsとブラウザの両方で機能する標準の継承システムを探しています。

sys.inheritsは、古いブラウザ(Object.create)では機能しません。

すべてのjsライブラリ(jquery、extjs、dojo ...)には、類似しているが異なる継承システムがあります。(どちらがnode.jsに適しているかわからない)

シンプルで将来的に「標準」になる可能性のあるものを使用したい(少なくともnode.jsベースのシステムでは)。

何か案が?どちらを使用していますか?

また、いくつかの興味深いプロジェクトが見つかりました:

http://howtonode.org/prototypical-inheritance(IEには適していません)

http://jsclass.jcoglan.com/modules.html(大きすぎる、ルビーすぎる?)

ちなみに、私はフロントエンドでrequire.jsを使用しています。

ありがとう

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

actionscript-3 - AS3 の無名関数で「get」と「set」を使用することは可能ですか?

私はそれを試しましたが、おそらく構文が間違っています:

「1084: 構文エラー: 取得する前に leftparen が必要です」というメッセージが表示されます。

私の印象では、このキーワードはクラスでのみ使用するためのものです。つまり、AS3 の基本的なプロトタイプの性質には適用されません。

注: この例は、タイムライン フレーム スクリプトではなく、クラス メソッド内にあるため、livedocs を引用しないでください。

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

javascript - 独自の名前空間をいつ使用し、いつネイティブ js オブジェクトを拡張する必要がありますか?

コードをリファクタリング中です。私が持っているいくつかのユーティリティ関数を正確に実装する方法を決めるのに苦労しています。 具体的には、特定の関数が私の個人的な名前空間で使用したり、js オブジェクトを直接拡張したりした方がよい場合。

ネイティブ JavaScript オブジェクトの拡張例

(これは適切な用語ですか?)。

自分の名前空間を使用した例

考慮すべき質問

  1. ユーティリティがネイティブ JavaScript オブジェクトに正当に挿入されるのはいつですか?
  2. ユーティリティが自分の名前空間にある方がよい場合はどうすればわかりますか?
0 投票する
2 に答える
228 参照

javascript - プライベート変数へのアクセスを許可する関数を動的にアタッチします

オブジェクトにコールバックを動的に割り当てようとしていますが、この関数にプライベート変数へのアクセスを許可しているときに、これを行う方法がわからないようです。壁にぶつかったところにコメントを付けて、関連するコードを以下にリストしました。

オブジェクトファクトリ

モジュール

さまざまな試み




この試みでは、モジュールオブジェクトにセッターを作成しようとしました...無駄になりました。


JavaScriptを間違って使用していますか?オブジェクトが開始された後にコールバックを割り当てることができるようにしたいと思います。これは可能ですか?

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

prototypal-inheritance - CoffeeScriptクラスの継承

私は、コーヒースクリプトで継承がどのように機能するかを理解しようとしています。これが私のコードの簡単な例です:

[1]ここで正しい子クラスを使用するには、マークされた行に何を入力する必要がありますか?これは機能しますが、のプロトタイプでのみオブジェクトを作成しますChildA。私は次のようなことを試しました:

...しかし、これobjは私のコールバック関数で未定義のままになります(TypeError:undefinedのプロパティ'foo'を読み取ることができません"。

クラスが可変であるクラスの新しいオブジェクトを作成できるようにするためのCoffeeScriptの魔法の呪文は何ですか?

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

javascript - Python でのプロトタイプ プログラミング

Javascript は、そのオブジェクトにプロトタイプ ベースのモデルを使用します。それにもかかわらず、言語は非常に柔軟で、他の種類の構文を置き換える関数を数行で簡単に記述できます。たとえば、class関数を作成して、継承やプライベート メンバーを含む標準クラスの動作をエミュレートできます。または、たとえば、curry関数とその引数の一部を取り、部分的に適用された関数を返す関数を書くことによって、機能的なツールを模倣することができます。

逆のことをして、より古典的な言語でプロトタイプの方法を模倣することができるかどうか、私は疑問に思っていました. 特に、Python でプロトタイプを模倣することが可能かどうかについて少し考えていましたが、無名関数 (ラムダよりも一般的) がサポートされていないため、立ち往生しています。

クラスベースの言語、特に Python でプロポタイプを模倣する関数を書くことは可能ですか?

編集そのようなことを実装する方法の例をいくつか挙げましょう(しかし、私は実際にすべてを行うことはできません)。

まず、Javascript オブジェクトに最もよく似ているのは Python 辞書です。したがって、次のような単純なオブジェクトを持つことができます

もちろん、メソッドを追加したいのですが、メソッドがラムダに収まる限り、これは問題ではありません

これで、インスタンスを呼び出すことができます

メソッドとして任意の関数があれば、このように続けることができます。まず、内部の関数がそれ自体fooにアクセスできるようにする必要があります。fooそれ以外の場合は、通常の関数であり、メソッドではありません。

makeObject関数をに適用することでこれを行うことができると思います。これは値fooをループし、foo呼び出し可能な値が見つかるたびに、その__call__属性を変更しfooて最初の引数として渡します。

この段階で、クラスを作成しなくても宣言できる自立型オブジェクトができます。

次にfoo、関数の 2 番目の引数として渡すことができるプロトタイプを提供できるようにする必要がありmakeObjectます。関数は次のように変更する必要がfoo.__getattr__ありfoo.__setattr__ます。属性が で見つからない場合は常にfooで検索する必要がありますfoo.prototype

だから、私はこれを実装できると思います.1つを期待してください.ラムダよりも複雑なメソッドを宣言する方法は、事前に宣言してオブジェクトに添付する以外には考えられません. 問題は、無名関数がないことです。Python の第一人者がこれを回避する巧妙な方法を見つけるかもしれないので、ここで質問しました。

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

javascript - 複数のオブジェクトからのJavaScriptの継承

私はjavascriptの継承にあまり精通しておらず、あるオブジェクトを別のオブジェクトから継承させ、独自のメソッドを定義しようとしています。

ただし、2番目のものは最初のもの(FooB.prototype = new Foo() is cancelled out)を上書きします。この問題を解決する方法はありますか、それとも間違った方向に進んでいますか?

よろしくお願いします。悪い用語でごめんなさい。

0 投票する
7 に答える
4441 参照

javascript - プライベートメソッドと特権メソッドとプロトタイプメソッド

JavaScriptでは、コンストラクターで宣言することにより、プライベートメソッドと特権メソッドを作成できます。これにより、オブジェクトのプロトタイプからそれらを移動する必要があります。次に、すべてのオブジェクトが1つのプロトタイプオブジェクトにアクセスする代わりに、それらのメソッドの独自のコピーを持つため、継承の可能性とパフォーマンスが失われます。

ですから、私の質問は、ペッターパターンとは何かということです。プライベートメソッドと特権メソッドを使用するかどうかです。私はぶら下がりの大ファンではないので、これを避けたいと思います。じゃあ何をすればいいの?

あなたの経験は何ですか?

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

javascript - JavaScript拡張タイプは

私は実際にCrockfordのJavascriptを研究しています:良い部分です。私はJavaScriptを初めて使用するため、このコードがどのように機能するかを理解するのに苦労しています。

これが私が思うことです:

メソッド(オブジェクト内の関数)であるthisため、オブジェクトを指しFunctionますが、メソッド内からアクセスできるので、なぜオブジェクトを返す必要があるのでしょうか。私が正しい場合、thisこれは参照であり、ローカルコピーではないため、次のようになります。

同様に機能するはずです。

反対側から、JavaScriptでは、returnステートメントのない関数が戻りundefined、それをに割り当てますFunction.prototype.method

質問

戻る意味は何thisですか?


実例#1

出力:

-3 3


実施例#2

出力:

-3 3

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

javascript - プロトタイプ使用時のJavascript継承の問題-インスタンスが上書きされました:(

私はJavaScriptプログラミングに不慣れで、継承に関して少し悪夢を抱いています。Appcelerator Titaniumのコードを書いていますが、継承したいSlide2Dという基本クラスがあります。

そこで、Slide2Dのプロトタイプにいくつかの関数を配置しました。これらは通常上書きされませんが、Slide2Dから派生したクラスから呼び出されます。これらの関数は、プログラムの他の部分からも呼び出されます。Titaniumでアニメーションを管理するために使用されるさまざまなイベントハンドラーもあります。

いくつかの呼び出しコードでこれらのスライドをいくつか作成すると(newを使用)

sまたはtのどちらを使用するかに関係なく、すべてのプロトタイプメソッドは最後に作成されたSlide2Dを指します。したがって、s変数を使用している場合でも、「slide2」が常に表示されます。

これは私を怒らせています-どんな助けでも大歓迎です。

コードの長さについて申し訳ありませんが、ここにあります:

編集

迅速な返信ありがとうございます。私はあなたが推奨する変更を加えました、そしてそれはその特定の問題を解決しました。

ただし、新しい問題が発生しました。

派生クラスであるExtendedSlide2DからSlide2D.prototype.getViewを呼び出す必要があります。

ただし、次のエラーが発生します。

ここで、基本クラスのビューオブジェクトにボタンを追加します。

このエラーは、私の言語の経験不足に起因すると確信していますが、もう一度、助けていただければ幸いです。

もう一度-ExtendedSlide2Dのコードは次のとおりです。