在javascript中使用dunder proto访问父函数时出现TypeError

时间:2016-09-05 17:36:06

标签: javascript object inheritance prototype proto

以下是我的示例代码

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

0 个答案:

没有答案