私はなぜこのエラーが発生しているのか混乱しています。私はいくつかの啓蒙をしたいです。javascriptオブジェクトのプロトタイプが壊れているようです
function c(me) { this.me = me; }
c.prototype.identify = function() { return "I am " + this.me; };
function d(me) { c.call(this, me); }
d.prototype = Object.create(c.prototype);
d.prototype.speak = function() { return "Hello, " + this.identify() + "." };
var d1 = new d("d1");
var d2 = new d("d2");
console.log(d1.speak());
console.log(d2.speak());
console.log(d.speak()); //returns: TypeError: d.speak is not a function
returns: TypeError: d.speak is not a function
私は明示的にd.prototype
にプロパティspeak
を追加しています。実際には、d1
とd2
はどちらもプロトタイプ階層のプロパティ/関数にアクセスできます。それでもd
に電話しようとすると、TypeErrorが発生します。私は役に立たないために様々な「調整」を試みました。スコープの問題を排除しようとしてIIFEでさまざまな部分をラップしようとしましたが効果はありませんでした。私は最後の行
console.log(d.speak); //returns: undefined
とundefined
を得るから()
を削除しました。これにより、speak
はd
にアクセスできるプロパティ/機能ではないことがわかります。すなわち、 speak
をblah
に変更し、コンソールに同じundefined
を記録してください。
console.log(d.blah); //returns: undefined
私は、目の新しいセットには明白かもしれない小さなものが欠けていることを知っています。
'd.speak()'文句を言わない仕事は 'D 'のプロトタイプオブジェクトに'話す() '関数を添付しているので、関数ではなく、 'd'関数自体ではありません。ですから、 'speak()'関数を 'd.speak = function(){}'のように 'd'自身につけるか、' d.prototype.speak() 'を呼んで呼び出す必要があります。 –
d.speak()が何を返すと思いますか? – Oriol
@Oriol、 'こんにちは、私は未定です.'私の期待でした。 – ppovoski