下面是我的示例代码,
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