最近、javascript でプロトタイピングを試していますが、次のコードが機能しない理由がわかりません。私がやりたいことは、パラメーター n を持つチーズの新しいインスタンスを作成することです。
function food(n) {
this.n=n;
}
function cheese(n) {
alert(this.n);
}
cheese.prototype=new food;
new cheese('paramesian');
最近、javascript でプロトタイピングを試していますが、次のコードが機能しない理由がわかりません。私がやりたいことは、パラメーター n を持つチーズの新しいインスタンスを作成することです。
function food(n) {
this.n=n;
}
function cheese(n) {
alert(this.n);
}
cheese.prototype=new food;
new cheese('paramesian');
新しいCheese
インスタンスを作成していますが、そのロジックはコンストラクターでのみ使用されるため、引数がインスタンス変数n
に使用または割り当てられることはありません。Cheese
this.n
Food
あなたはいくつかのことをすることができます:
1. オブジェクトと新しく作成されたコンテキスト ( )を使用して、関数内でコンストラクターを適用します。Food
Cheese
arguments
this
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'
JavaScript でプロトタイプ チェーンがどのように機能するかを理解したいだけのようです。以下は、優れたシンプルでよく説明されたチュートリアルです http://www.herongyang.com/JavaScript/Inheritance-from-Constructor-Prototype-Object.html
編集、これは明らかにプロトタイプの継承ではありませんが (コメントを参照)、この特定の目的のために機能するようです。
function food(n) {
this.n=n;
}
function cheese(n) {
this.prototype = food;
this.prototype(n);
alert(this.n);
}
new cheese('paramesian');