5

最近、javascript でプロトタイピングを試していますが、次のコードが機能しない理由がわかりません。私がやりたいことは、パラメーター n を持つチーズの新しいインスタンスを作成することです。

function food(n) {
    this.n=n;
}
function cheese(n) {
    alert(this.n);
}
cheese.prototype=new food;
new cheese('paramesian');
4

3 に答える 3

9

新しいCheeseインスタンスを作成していますが、そのロジックはコンストラクターでのみ使用されるため、引数がインスタンス変数nに使用または割り当てられることはありません。Cheesethis.nFood

あなたはいくつかのことをすることができます:

1. オブジェクトと新しく作成されたコンテキスト ( )を使用して、関数内でコンストラクターを適用します。FoodCheeseargumentsthis

function Food(n) {
    this.n=n;
}

function Cheese(n) {
    Food.apply (this, arguments);
    alert(this.n);
}

new Cheese('paramesian');

2. コンストラクター関数でFoodコンストラクター ロジック ( this.n = n) を繰り返します。Cheese

function Food(n) {
    this.n=n;
}

function Cheese(n) {
    this.n = n;
    alert(this.n);
}

Cheese.prototype = new Food();
new Cheese('paramesian');

3. パワー コンストラクターなどの別の手法を使用します。

function food (n) {
  var instance = {};
  instance.n = n;

  return instance;
}


function cheese (n) {
  var instance = food(n);
  alert(instance.n);

  return instance;
}

cheese('parmesian');
cheese('gouda');

4 . さらに別のオプション、プロトタイプ継承:

// helper function
if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    function F () {}
    F.prototype = o;
    return new F();
  };
}

var food = {
  n: "base food",
  showName : function () { alert(this.n); }
};

var cheese1 = Object.create(food);
cheese1.n = 'parmesian';
cheese1.showName(); // method exists only in 'food'
于 2009-11-29T00:42:19.197 に答える
0

JavaScript でプロトタイプ チェーンがどのように機能するかを理解したいだけのようです。以下は、優れたシンプルでよく説明されたチュートリアルです http://www.herongyang.com/JavaScript/Inheritance-from-Constructor-Prototype-Object.html

于 2009-11-30T09:49:37.853 に答える
-1

編集、これは明らかにプロトタイプの継承ではありませんが (コメントを参照)、この特定の目的のために機能するようです。

function food(n) {
    this.n=n;
}
function cheese(n) {
    this.prototype = food;
    this.prototype(n);

    alert(this.n);
}

new cheese('paramesian');
于 2009-11-29T00:38:47.050 に答える