__proto__ для IE9 или IE10

Есть ли возможность изменить свойство __proto__ объекта в IE9 или IE10? Или MS все еще не планирует включать его в свой JS-движок?

Мне нужно это в очень особой ситуации, когда мне нужно изменить __proto__ после создания объекта.

Ответ 1

__proto__ будет стандартизован в ES6. В настоящее время он находится в приложении B проекта ES6, который на практике означает, что если он реализован, он должен иметь следующую семантику.

__proto__ доступны как аксессор на Object.prototype, что означает, что все объекты могут читать и писать по умолчанию. Однако его можно удалить из Object.prototype (используя delete). После удаления __proto__ будет работать как нормальное свойство данных без каких-либо побочных эффектов при настройке.

__proto__ также является специальной синтаксической формой в объектных литералах. Он будет работать, чтобы установить [[Prototype]], даже если Object.prototype.__proto__ был удален.

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

ES6 также вводит Object.setPrototypeOf (не в приложении). Это предпочтительнее настройки __proto__.

__proto__ доступен во всех современных браузерах, включая Internet Explorer 11.

Ответ 3

Без ответа в качестве последнего случая:

Измените свой код, чтобы теперь все свойства, к которым первоначально был доступен доступ через измененный прототип, теперь можно получить через явное делегирование над нормальным свойством:

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

к

{
   a: 17,
   proto: {...}
}

Ответ 4

Я не уверен, что именно вы делаете после того, как ваш вопрос не уточнил, но для большинства применений прото, вы должны иметь возможность использовать prototype.

var foo = new Bar();
//this also affects foo
Bar.prototype.baz = something;