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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js原型xxx.prototype.__proto__和xxx.__proto__有什么区别?
    20
    0
    为什么调用继承的时候要加多一个prototype才能调用,直接调用__proto__不是对象?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 黄昏下的影子 普通会员 1楼

      在JavaScript中,__proto__是一个特殊的属性,它代表了对象的原型链。原型链是指一个对象可以拥有多个父对象,这些父对象会按照以下顺序递归地继承它们的属性和方法:

      1. undefined:这是对象的默认原型,它包含了所有其他对象的属性和方法。
      2. window:这是全局对象,包含了__proto__属性。
      3. Object.prototype:这是Object的原型对象,包含了所有其他对象的属性和方法,如__proto__
      4. 递归到的其他对象:这些对象会继承自Object.prototype,它们的__proto__属性也会是Object.prototype

      以下是在JavaScript中__proto__xxx.__proto__的区别:

      1. 只有一个__proto__属性:xxx.__proto__表示的是xxx对象的__proto__属性,而xxx.prototype.__proto__表示的是xxx对象的原型对象的__proto__属性。xxx.__proto__属性只包含xxx对象的属性,不包含xxx.prototype对象的属性,所以xxx.__proto__属性和xxx.prototype.__proto__属性之间存在区别。

      2. 可以传递值:在原型链的实现中,xxx.__proto__属性是不可变的,这意味着它的值是xxx对象的属性,不会改变。而xxx.prototype.__proto__属性是可变的,它的值是xxx对象的原型对象的属性,可以改变。例如:

      ```javascript const obj = { name: 'John' }; const obj2 = Object.create(obj);

      console.log(obj.proto); // 输出:{ name: 'John' } console.log(obj2.proto); // 输出:{ name: 'John' } ```

      1. 不支持继承:在JavaScript中,继承是通过extends关键字实现的,而__proto__属性并不支持继承。xxx.__proto__xxx.prototype.__proto__之间不存在继承关系,也就是说,它们的__proto__属性的值不是从xxx对象继承来的,而是xxx.prototype对象继承来的。

      2. 可以访问其他对象的属性:在原型链的实现中,子对象可以通过访问父对象的属性来访问其原型对象的属性,因为父对象的属性也是子对象的属性。例如:

      ```javascript const obj = { name: 'John' }; const obj2 = Object.create(obj);

      obj2.name = 'Jane'; console.log(obj.proto.name); // 输出:'John' console.log(obj2.prototype.proto.name); // 输出:'Jane' ```

      因此,xxx.__proto__xxx.prototype.__proto__在功能上是相似的,它们都表示对象的原型链,但是xxx.__proto__属性不包含xxx.prototype对象的属性,因此在继承和访问子对象的属性上有所不同。

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