2016-08-08 14 views
0

Я определил основы и производного класса, как определили функцию под названием «getYear»:Странная ошибка неопределенной функции в Javascript

function Base() {} 
Base.prototype.getYear = function() { 
    return 2015; 
} 

function Derived() { 
    year = 2016; 
} 
Derived.prototype = new Base(); 
Derived.prototype.getYear = function() { 
    return 2017; 
} 

var ins = new Derived(); 
console.log(ins.getYear()); 
console.log(ins.prototype.getYear()); 

Последнее утверждение вызовет ошибку во время выполнения, говоря

Cannot read property 'getYear' of undefined 

Не могли бы вы объяснить причину? Я думаю, что я определил эту функцию как в базовой, так и в производной функции.

ответ

1

prototypes (методы экземпляра) объявлены на Constructor и используются только на instance. Если вы хотите использовать оригинальный метод прототипа на основе, например, вы могли бы сделать что-то вроде:

var ins = new Derived(); 
ins.constructor.prototype.getYear(); 

, где вы получите getYear прототип от оригинального constructor. Тем не менее, этот вид поражает цель использования прототипов в смысле экземпляра.

Вот ваш пример, переработан, чтобы делать то, что вы пытаетесь:

function Base() {} 
 
Base.prototype.getYear = function() { 
 
    return 2015; 
 
} 
 

 
function Derived() { 
 
    year = 2016; 
 
} 
 
Derived.prototype = new Base(); 
 
Derived.prototype.getYear = function() { 
 
    return 2017; 
 
} 
 

 
var ins = new Derived(); 
 
console.log(ins.getYear()); 
 
console.log(ins.constructor.prototype.getYear());

 Смежные вопросы

  • Нет связанных вопросов^_^