1

私はプログラミングのプロトタイプの方法が好きで、javascript でそれを理解しようとしています。

The Good Parts でこのコードを見ました。

function beget(o){
  function F(){
    F.prototype = o;
  };
  return new F();
};

これが全然わからない笑。プロトタイプを過去のオブジェクトに設定するだけなら、次のようにできませんでした:

var parent = {
  num = 66;
};
var child = {
  prototype: parent
};

ただし、これは機能していないようです。これは、child.num が未定義として返されるためです。JavaScript プロトタイプ プログラミングをどのように説明し、どのような方法をとっていますか? みんなありがとう

4

5 に答える 5

2

個人的には、最も慣用的な方法は次のとおりだと思います。

function Parent() {
    this.value = 2;
}

function Child() {

}

Child.prototype = new Parent();

var c = new Child();
alert(c instanceof Child); // true
alert(c instanceof Parent); // true
alert(c.value); // 2
于 2011-05-06T21:30:27.833 に答える
1

この.prototypeプロパティは JavaScript にとって特別な意味を持ちますが、それは関数に対してのみであり、コードが機能しないのはそのためです。

「プロトタイプ継承」では、基本クラスから継承しません。代わりに、いくつかのオブジェクトから始めて、最初のオブジェクトをプロトタイプとして使用して新しいオブジェクトを作成します。次に、新しく作成したオブジェクトにプロパティとメソッドを追加します。

「あなたの方法は何ですか?」という言葉が何を意味しているのかわかりません。プログラミング方法論、またはそのようなものを意味しますか?

更新: あなたの質問はかなり広範であり、ここで短い答えでそれを正当化できるとは思いません。以下の SO の質問をご覧になることをお勧めします。これには、JS プロトタイプと同様に、他の人がこのトピックで役立つと思ったものへのリンク。

JavaScript .prototype はどのように機能しますか?

于 2011-05-06T21:29:47.183 に答える
1

prototype関数オブジェクトにのみ追加できます。それを介して呼び出されるnewと、それをプロトタイプとして使用します。

ところで、引用した関数は、新しいバージョンの ECMAScript の一部ですObject.create(追加のpropertiesObjectパラメーターを使用)。

このように言いましょう:{object}singletonです。function() objectただし、Aはコンストラクターです。つまり、 with を呼び出すと、(関数の本体を実行し、コンストラクターのプロトタイプを使用して)インスタンスnewを作成します。もちろん、プロトタイプも関数オブジェクトにすることができ、独自のプロトタイプを持つこともできます。特殊化と一般化は、プロトタイプ チェーンを上ったり下ったりすることを意味します。

于 2011-05-06T21:31:31.237 に答える
1

オブジェクトのプロパティを設定するだけなので、2 番目の例は機能しません。やりたいことは、コンストラクター関数のプロトタイプ プロパティを設定し、その関数からオブジェクトを作成することです。

var parent = {
   num : 666
};

function ChildConstructor(){
   console.log(this.num);
}
ChildConstructor.prototype = parent;

var child = new ChildConstructor();

http://jsfiddle.net/W9C3K/

独自のメソッドがなければ、オブジェクトのプロトタイプを設定または変更することはできません。

于 2011-05-06T21:32:08.407 に答える
0
var parent = {
  num : 66
};
var child = {
   __proto__: parent
};
于 2011-05-06T21:36:04.230 に答える