账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js继承,为什么ClassB.prototype.__proto__ = ClassA.prototype不能用?
    30
    0

    先贴代码

    function ClassA(name) {
        this.name = name
    }
    
    ClassA.prototype.sayName = function () {
        // 省略
    }
    
    function ClassB(name, age) {
        ClassA.call(this, name)
        this.age = age
    }
    
    // 为什么下面这句不能用???
    ClassB.prototype.__proto__ = ClassA.prototype
    
    ClassB.prototype.sayAge = function () {
        // 省略
    }
    
    let instance = new ClassB('小明', 11)

    如题,为何在实现继承中,ClassB.prototype.__proto__ = ClassA.prototype不能用?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 真的累了。 普通会员 1楼

      在JavaScript中,__proto__属性用于获取一个对象的原型链。如果你尝试将ClassB.prototype设置为ClassA.prototype,你将尝试访问一个不存在的对象的属性,因此会出现错误。

      如果你想要获取ClassA的原型,你可以使用Object.getPrototypeOf()方法,如下所示:

      ```javascript class ClassA { constructor() { this._proto = new ClassB(); } }

      class ClassB extends ClassA { constructor() { super(); this._proto = new Object.getPrototypeOf(this); } }

      const classB = new ClassB(); console.log(classB.proto.constructor); // 输出:ClassB ```

      在这个例子中,我们创建了一个ClassA的实例,并为它添加了一个_proto属性。然后我们创建了一个ClassB的实例,并将_proto属性设置为Object.getPrototypeOf(this),这将获取ClassA的原型。

      这样,当你尝试访问ClassB_proto属性时,你会得到正确的结果,即ClassB的原型。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部