2015-01-12 2 views
0

Я новичок в JavaScript и в настоящее время проходит в Полное руководство третье издание Томасом А. Пауэлл, Фриц Шнайдер.Настройка наследования через конструктор собственности и InstanceOf оператора

Привожу отрывок из той же книги о разности б/ш конструктору собственности и InstanceOf оператора. Однако разница тонкая. InstanceOf оператор рекурсивно проверитьвесь внутренний прототип цепи (что означает все типы предков), тогда как конструктор проверки, как показано только проверить немедленным свойство объекта экземпляра. Это наследственный проверка часто очень полезны в унаследованных моделей программирования со многими слоями наследования:

function Robot(){ 

} 
function UltraRobot(){ 

} 

var robot = new Robot(); 
var guard = new UltraRobot(); 

alert(robot.constructor == Robot);   // true 
alert(guard.constructor == UltraRobot);  // true 
guard.constructor = Robot;     // Set up inheritance 

alert(robot instanceof Robot);    // true 
alert(guard instanceof UltraRobot);   // true 
alert('Here'); 
alert(guard instanceof Robot);    // true, through Inheritance 
alert(guard instanceof Object);    // true, all objects descend from Object 

Однако ниже линии в книге автора,

alert(guard instanceof Robot);    // true, through Inheritance 

для меня, результаты ложно, который оставляет меня гадать, как оператор InstanceOf будет рекурсивно проверитьвесь внутренний прототип цепи.

+2

Я думаю, вам не хватает строки, что-то вроде UltraRobot.prototype = new Robot(); – dandavis

+0

@ dandavis: Нет, я проверил его. –

+0

'alert (guard instanceof Robot);' тогда должно быть false. – vjdhama

ответ

1

Используйте Object.create() для достижения классического наследования.

function Robot(){ 
} 
function UltraRobot(){ 
    Robot.call(this); 
} 
UltraRobot.prototype = Object.create(Robot.prototype); 


var robot = new Robot(); 
var guard = new UltraRobot(); 
alert(guard instanceof Robot);  // true, through Inheritance 
Смежные вопросы