0

下面是我的示例代码,

function Employee(name){
  this.name = name;
}

Employee.prototype.getName = function(){
  return this.name;
}

var a = new Employee("a");

function Manager(name){
  this.name = name;
}

var b = new Manager("b");

//Case:1

Manager.__proto__ = Employee.prototype;
console.log(b.getName());

//Case:2
b.__proto__.__proto__ = Employee.prototype;
console.log(b.getName());

案例:1当 Manager 的 dunder 原型指向 Employee 原型时,它会产生 TypeError( TypeError: b.getName is not a function )。

案例:2但是,在这种情况下,当从经理的实例 dunder proto(ie b.__proto__) 开始指向 Employee 原型时,这将正常工作并给出正确的结果。

根据继承规律, 1.getName实例'b'如果是通过构造函数方式创建的,则 最初寻找函数本身。2.否则会getName在 Manager 的原型对象中查找。 3.现在下一个级别是Object.prototype

如果我在任何意义上错了,请纠正我。

但我希望将 Manager__proto__指向 Employee 原型而不是Object.prototype. 我试图通过Manager.__proto__ = Employee.prototype;and来实现这一点b.__proto__.__proto__ = Employee.prototype;。只有后者工作正常。

当这两个方法都指向 Employee 原型时,为什么会Manager.__proto__ = Employee.prototype;抛出?TypeError

4

0 回答 0