ES5 原型继承

发布于 2022-09-11 20:20:31 字数 507 浏览 22 评论 0

ES5 原型继承过程中为什么需要创建一个临时函数?

题目来源及自己的思路

clipboard.png

相关代码

function inherit(C,P) {
    var F = new Function();  // 临时构造函数
    F.prototype = P.prototype;
    C.super = P; // 使得子类能够获得对父类的引用
    C.prototype = new F(); // 使得子类的原型对象__proto__指向父类的原型对象,从而实现继承原型方法
    C.prototype.constructor = C; // 使得子类的constructor指针重新指向子类的构造函数
}

inherit(ChildrenClass,ParentClass)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

允世 2022-09-18 20:20:31

创建一个临时函数目的是为了隔离C的prototype和P的prototype,这样假如C的prototype有引用对象的时候,对其进行修改时不会影响到P的prototype。

let pro ={
    name:'jsdt',
    hobby:[1,2,3]
}
function inherit(C,P) {
    var F = new Function();  // 临时构造函数
    F.prototype = P.prototype;
    C.super = P; // 使得子类能够获得对父类的引用
    C.prototype = new F(); // 使得子类的原型对象__proto__指向父类的原型对象,从而实现继承原型方法
    C.prototype.constructor = C; // 使得子类的constructor指针重新指向子类的构造函数
}

function C(){}
function P(){}
P.prototype = pro
inherit(C, P)
let c1 = new C()
let p1 = new P()
c1.__proto__.hobby = [4,5,6]
console.log(c1.hobby); //[ 4, 5, 6 ]
console.log(p1.hobby); //[ 1, 2, 3 ]  保持不变
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文