__proto__ for IE9 or IE10

前端 未结 4 537
南笙
南笙 2020-12-17 04:12

Is there any possibility to change the __proto__ property of an object in IE9 or IE10? Or is MS still not planning to include it in their JS engine?

I n

相关标签:
4条回答
  • 2020-12-17 04:59

    __proto__ is going to be standardized in ES6. It is currently in Appendix B of the ES6 draft which in practice means that if it is implemented it needs to have the following semantics.

    __proto__ is both available as an accessor on Object.prototype which means that all objects can read and write it by default. However, it can be removed from Object.prototype (using delete). Once deleted __proto__ will work as a normal data property with no side effects on setting.

    __proto__ is also a special syntactic form in object literals. It will work to set the [[Prototype]] even if Object.prototype.__proto__ was deleted.

    var p = {a: 1};
    var o = {
      __proto__: p,
      b: 2
    }
    

    ES6 also introduces Object.setPrototypeOf (not in the appendix). This is preferred over setting __proto__.

    __proto__ is available in all modern browsers, including Internet Explorer 11.

    0 讨论(0)
  • 2020-12-17 05:02

    __proto__ is included in IE11 found in the leaked build of Windows Blue: http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/

    0 讨论(0)
  • 2020-12-17 05:06

    I'm not sure what exactly it is you're after since your question didn't specify, but for most uses of proto, you should be able to use prototype.

    var foo = new Bar();
    //this also affects foo
    Bar.prototype.baz = something;
    
    0 讨论(0)
  • 2020-12-17 05:10

    A nonanswer as a last case resort:

    Change your code so that all the properties that would originally be accessed via the changed prototype are now accessed via explicit delegation over a normal property:

    {
       a: 17,
       __proto__: { ... }
    }
    

    to

    {
       a: 17,
       proto: {...}
    }
    
    0 讨论(0)
提交回复
热议问题