为什么 Object.setProtoypeOf 不适用于函数?



假设我们有以下代码:

"use strict";
function Student() {}
Student.prototype.sayName = function () {
console.log(this.name);
};
function EighthGrader(name) {
this.name = name;
this.grade = 8;
}
Object.setPrototypeOf(EighthGrader, Student.prototype);
const carl = new EighthGrader("carl");
carl.sayName(); // Uncaught TypeError: carl.sayName is not a function

如果JavaScript中的所有函数都是对象,为什么Object.setPrototypeOf不能处理函数?

setPrototypeOf方法在函数上运行良好,现在可以执行EighthGrader.sayName()(也就是说EightGrader函数的.name(,并且不能再执行以前从Function.prototype继承的EighthGrader.call()

只是您不希望在函数上使用它,而是希望在carl继承的原型对象上使用它。要做到这一点,你必须使用

Object.setPrototypeOf(EighthGrader.prototype, Student.prototype);

carl的原型链是

carl -> EighthGrader.prototype -> …

不是

carl -> EightGrader -> …

相关内容

  • 没有找到相关文章

最新更新