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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    babel转码es6的继承语法时为什么给子类构造函数设置__ptoto__?
    49
    0
    function _inherits(subClass, superClass) {
      if (typeof superClass !== "function" && superClass !== null) {
        throw new TypeError(
          "Super expression must either be null or a function, not " +
            typeof superClass
        );
      }
      subClass.prototype = Object.create(superClass && superClass.prototype, {
        constructor: {
          value: subClass,
          enumerable: false,
          writable: true,
          configurable: true
        }
      });
      if (superClass)
        Object.setPrototypeOf
          ? Object.setPrototypeOf(subClass, superClass)
          : (subClass.__proto__ = superClass);
    }

    上面是babel转码后的效果,其中这段代码

    if (superClass)
        Object.setPrototypeOf
          ? Object.setPrototypeOf(subClass, superClass)
          : (subClass.__proto__ = superClass);

    问题:1.这段代码不加我觉得也算实现继承了吧?看高程里面貌似也没有给子类的构造函数设置__proto__的代码啊?设置跟不设置有多大区别?

    1. __proto__印象中不是只有对象才有么?虽然js里面一切皆对象,但是常见的故事new 出来的实例会讲到它的__proto__,函数的__proto__怎么理解?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Babel中,为子类构造函数设置__ptoto__是为了实现继承的功能。

      在JavaScript中,__ptoto__是一个特殊的属性,它的值始终为undefined。这意味着,当我们尝试访问或操作一个对象的__ptoto__属性时,它将始终返回undefined。这个特性被用于实现原型继承。

      在JavaScript中,对象的原型是通过创建一个指向对象原型的引用来实现的。这个引用被称为__proto____proto__的值是对象自身的__proto__,即null。在__proto__的属性中,有一个特殊的属性__ptoto__,它的值始终为undefined

      例如,如果你有一个名为Person的类,它有一个__ptoto__属性:

      javascript class Person { constructor(name, age) { this.name = name; this.age = age; this.__ptoto__ = undefined; } }

      当你尝试访问或操作Person__ptoto__属性时,Babel将不会抛出错误,因为它会自动检测到__ptoto__属性的值始终为undefined

      这种特性在处理原型继承时非常有用,因为它允许你创建一个新的对象,该对象具有和父对象相同的属性,但其值有所不同。例如:

      ```javascript function Animal(name, age) { this.name = name; this.age = age; }

      Animal.prototype嘶嘶叫 = function() { console.log('嘶嘶叫'); };

      var myDog = new Animal('Max', 2); myDog嘶嘶叫(); // 输出:嘶嘶叫 ```

      在这个例子中,myDog继承了Animalnameage属性,但它的嘶嘶叫属性的值为undefined,这意味着myDog具有和父对象相同的属性,但其值有所不同。

    • 清音悠歌 普通会员 2楼

      在Babel中,为子类构造函数设置__ptoto__是为了实现继承的功能。

      在JavaScript中,__ptoto__是一个特殊的属性,它的值始终为undefined。这意味着,当我们尝试访问或操作一个对象的__ptoto__属性时,它将始终返回undefined。这个特性被用于实现原型继承。

      在JavaScript中,对象的原型是通过创建一个指向对象原型的引用来实现的。这个引用被称为__proto____proto__的值是对象自身的__proto__,即null。在__proto__的属性中,有一个特殊的属性__ptoto__,它的值始终为undefined

      例如,如果你有一个名为Person的类,它有一个__ptoto__属性:

      javascript class Person { constructor(name, age) { this.name = name; this.age = age; this.__ptoto__ = undefined; } }

      当你尝试访问或操作Person__ptoto__属性时,Babel将不会抛出错误,因为它会自动检测到__ptoto__属性的值始终为undefined

      这种特性在处理原型继承时非常有用,因为它允许你创建一个新的对象,该对象具有和父对象相同的属性,但其值有所不同。例如:

      ```javascript function Animal(name, age) { this.name = name; this.age = age; }

      Animal.prototype嘶嘶叫 = function() { console.log('嘶嘶叫'); };

      var myDog = new Animal('Max', 2); myDog嘶嘶叫(); // 输出:嘶嘶叫 ```

      在这个例子中,myDog继承了Animalnameage属性,但它的嘶嘶叫属性的值为undefined,这意味着myDog具有和父对象相同的属性,但其值有所不同。

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