以下是我的示例代码
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 proto指向Employee原型时,它会产生TypeError( TypeError:b.getName不是函数)。
案例:2 但是在这种情况下,从Manager的实例dunder proto(即b.__proto__
)开始指向Employee原型时,这样可以正常工作并给出正确的结果。
根据继承法,
1。实例' b'如果它是通过构造函数模式创建的,它最初会查找函数getName
。
2。否则会在Manager的原型对象中查找getName
。
3。现在下一级是Object.prototype
。
如果我在任何意义上都错了,请纠正我。
但我希望将经理__proto__
指向员工原型,而不是Object.prototype
。
我试图通过Manager.__proto__ = Employee.prototype;
和b.__proto__.__proto__ = Employee.prototype;
来实现这一目标。只有后者才能正常工作。
当两个方法都指向Employee原型时,为什么Manager.__proto__ = Employee.prototype;
抛出TypeError
?