ES5 原型继承

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)
阅读 523
评论
    1 个回答
    • 4.6k

    创建一个临时函数目的是为了隔离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 ]  保持不变
    
      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章