Я читал о прототипном наследовании JavaScript и свойстве прототипа, и я начал делать скрипку, чтобы лучше понять концепции. Но мне нужна помощь, чтобы понять, почему мой пример не работает, как я думал.Наследование прототипа JavaScript для отображения родительского имени объекта
В следующем примере я пытаюсь создать иерархию, где, когда вы создаете объект, он сообщает вам имя родительского объекта. Однако мои журналы всегда возвращают «объект».
В одной статье объясняется, что цепочка прототипов работает так, что если свойство не найдено на объекте, проверяется прототип родителя, и он продолжает расти до «объекта», а если не найден, возвращается неопределенный.
Вот скрипку идти вместе: http://jsfiddle.net/hqozqd0m/
Object.prototype.cname = 'object';
function plant() {
function parentname() { return this.cname; }
return {
parentname:parentname
}
}
plant.prototype.cname = 'plant';
function tomato() {
function parentname() { return this.cname; }
return {
parentname:parentname
}
}
tomato.prototype = new plant(); // <-- settings it to plant as parent
var p = new plant();
var t = new tomato();
console.log(p.parentname()); //object
console.log(t.parentname()); //object
обновленный код - тот же результат
Object.prototype.cname = 'object';
function plant() {
this.sayparentname = function() { console.log(cname); };
}
plant.prototype.cname = 'plant';
function tomato() {
this.sayparentname = function() { console.log(cname); };
}
tomato.prototype = new plant();
var p = new plant();
var t = new tomato();
p.sayparentname();
t.sayparentname();
Вы неправильно смешивая два разных стиля. Тот, у кого есть новый, и тот, где возвращаются объекты literal из функций, вызванных без new. –