Есть ли возможность изменить свойство __proto__ объекта в IE9 или IE10?
Или MS все еще не планирует включать его в свой JS-движок?
Мне нужно это в очень особой ситуации, когда мне нужно изменить __proto__ после создания объекта.
Есть ли возможность изменить свойство __proto__ объекта в IE9 или IE10?
Или MS все еще не планирует включать его в свой JS-движок?
Мне нужно это в очень особой ситуации, когда мне нужно изменить __proto__ после создания объекта.
__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.
__proto__ включен в IE11, найденный в просочившейся сборке Windows Blue: http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/
Без ответа в качестве последнего случая:
Измените свой код, чтобы теперь все свойства, к которым первоначально был доступен доступ через измененный прототип, теперь можно получить через явное делегирование над нормальным свойством:
{
a: 17,
__proto__: { ... }
}
к
{
a: 17,
proto: {...}
}
Я не уверен, что именно вы делаете после того, как ваш вопрос не уточнил, но для большинства применений прото, вы должны иметь возможность использовать prototype.
var foo = new Bar();
//this also affects foo
Bar.prototype.baz = something;