Я смущен, почему я получаю эту ошибку здесь. Я хотел бы немного просветления.прототип объекта 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
Я явно добавив свойство speak
в d.prototype
. Фактически, 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()' не будет работать, потому что вы присоединили 'Speak()' функцию к объекту прототипа 'd' функция, а не сама функция 'd'. Таким образом, вам нужно прикрепить функцию 'speak()' к 'd', как' d.speak = function() {} ', или вызвать' d.prototype.speak() ', чтобы вызвать его. –
Интересно, что вы ожидали возвращения 'd.speak()'? – Oriol
@Oriol, 'Привет, я не знаю. 'Было моим ожиданием. – ppovoski