13.JavaScript-继承方式三

上一篇12.继承方式二有这么一句话

还是有弊端:假如Person.prototype添加了新的方法,Student实例想用怎么办?没法呀

  • 主要通过下面两句话解决弊端(前提用了call,看上一篇继承方式二):
Student.prototype = Person.prototype;
Student.prototype.constructor = Student;
function Person(myName, myAge) {
            this.name = myName; // stu.name = myName;
            this.age = myAge; // stu.age = myAge;

            // return this;
        }
        Person.prototype.say = function () {
            console.log(this.name, this.age);
        }
        function Student(myName, myAge, myScore) {
            Person.call(this, myName, myAge);
            this.score = myScore;
            this.study = function () {
                console.log("day day up");
            }
        }
        // 注意点: 要想使用Person原型对象中的属性和方法, 
        //那么就必须将Student的原型对象改为Person的原型对象才可以
        Student.prototype = Person.prototype;
        Student.prototype.constructor = Student;

        let stu = new Student("ww", 19, 99);
        console.log(stu.score);
        stu.say();
        stu.study();

这种方式还是有弊端的,问题出现在解决问题的语句上

Student.prototype = Person.prototype;
Student.prototype.constructor = Student;

有什么弊端?设Person.prototype为A,即Student.prototype 也为A,就是说Person原型对象和Student原型对象是同一个,同一个地址,而对象是引用类型,那么对Student.prototype设置constructor 为Student,即Person.prototype.constructor也为Student~!

解决方法看下一篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、构造函数模式 [url=]file:///C:/Users/i037145/AppData/Local/Tem...
    横冲直撞666阅读 4,324评论 0 0
  • 将Student构造函数的原型对象改为Person构造函数的原型对象注意点: 要想使用Person原型对象中的属性...
    仰望_IT阅读 1,666评论 0 1
  • avaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时...
    源大侠阅读 2,166评论 0 1
  • 上班。hello单车。 上午找W-06-00974/D41-17的蜂鸣器。没有。 接到天津来的输入轴。62元。 接...
    hailei阅读 1,202评论 0 0
  • 有人说“和朋友最舒服的相处模式,不是无话不说,而是可以不说话。”现在的我才懂得了这个道理,可初中的我并不懂,那时候...
    小菜哟阅读 3,698评论 3 4

友情链接更多精彩内容