【问题标题】:JavaScript and __proto__ - what browsers use it?JavaScript 和 __proto__ - 哪些浏览器使用它?
【发布时间】:2010-06-21 07:32:04
【问题描述】:

哪些网络浏览器使用__proto__Mozilla states那个:

请注意,__proto__ 可能在 Mozilla 以外的 JavaScript 版本中不可用。

【问题讨论】:

  • 您可以将__proto__ 括在反引号` 中以进行格式化。
  • StackOverflow 格式只有在您不花时间了解它的工作原理时才会很糟糕。
  • azerty 键盘 FWIW 上没有反引号键

标签: javascript prototype


【解决方案1】:

点击here获取答案。

详情

最通用的方法是在不同的浏览器中测试这个页面:

<html>
  <head>
    <script type="text/javascript">
      function a() {}
      if ( (new a).__proto__ === a.prototype )
          alert('supported');
    </script>

  </head>
</html>

如果浏览器支持__proto__,它会发出警报。我已将其提交给browsershots.org,它将在许多不同的浏览器中创建页面的屏幕截图。因此,您应该通过警告消息看到哪个浏览器支持它。

【讨论】:

  • 谢谢!综上所述,IE、Safari
  • 链接不再有效。有人知道IE9吗?
  • 我刚刚在 IE9 和 IE10 中测试了这个。它在IE9中不起作用,但在IE10中起作用。
【解决方案2】:

Browser Security Handbook 有一个表格显示哪些浏览器公开了__proto__

目前,这些浏览器是:

  • 火狐2
  • 火狐3
  • 野生动物园
  • 安卓

那些被排除在外的人:

  • IE 6、7、8
  • 歌剧

【讨论】:

    【解决方案3】:

    您发布的句子的结尾是See below for workarounds.,其中讨论了使用super.prototype 的替代方法extends()

    function extend(child, super){  
      for (var property in super.prototype) {  
        if (typeof child.prototype[property] == "undefined")  
          child.prototype[property] = super.prototype[property];  
      }  
      return child;  
    }
    

    【讨论】:

    • 我知道,但我想知道哪些网络浏览器支持__proto__。根据答案,我什至可能不需要那种功能。
    • 我不明白为什么要将属性从一个对象复制到另一个对象...这违背了 JS 中内置的强大原型继承的目的。
    【解决方案4】:

    这不是问题的直接答案,但它可能对那些想知道对象实例原型的人有所帮助(这是__proto__ 经常使用的)。 所有现代浏览器(包括 IE9) 支持getPrototypeOf() 可以用来确定对象的原型。具有讽刺意味的是,一些仍然实际的浏览器(例如 IE7 和 IE8)不支持Object.getPrototypeOf(obj) 也不支持obj.__proto__。对于这些浏览器,您可以使用obj.constructor.prototype。不过这有点危险,因为这个属性可以重新定义。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2011-05-11
      • 2016-08-31
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 2016-04-30
      相关资源
      最近更新 更多