Есть ли возможность изменить свойство __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;