我是JavaScript的初学者,目前正在阅读Thomas A. Powell和Fritz Schneider撰写的The Complete Reference 3rd Edition。


  我引用同一本书中关于黑白差异的摘录
  构造函数Property和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


对我来说,结果为false,这使我不得不猜测instanceof运算符将如何递归检查整个内部原型链。

最佳答案

使用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

关于javascript - 通过构造函数Property和instanceof运算符设置继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27909353/

10-12 01:24