__proto__ для IE9 или IE10 - PullRequest
       6

__proto__ для IE9 или IE10

5 голосов
/ 07 декабря 2011

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

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

Ответы [ 4 ]

12 голосов
/ 11 августа 2012

__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 .

2 голосов
/ 05 апреля 2013

__proto__ включен в IE11, найденный в утечке сборки Windows Blue: http://fremycompany.com/BG/2013/Internet-Explorer-11-rsquo-s-leaked-build-395/

1 голос
/ 07 декабря 2011

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

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

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

до

{
   a: 17,
   proto: {...}
}
0 голосов
/ 07 декабря 2011

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

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