давайте остановимся на том, что тот, кто умеет программировать без работы не останется. Или я не прав? ;)
|
По сути да, а вот на практике может и подругому получиться.
Приятели мои организовали конторку и бодро фигачели на VB + Office. Бизнес анализ планирование всякое. Продукт был очень хороший. Грил я им, переползайте на 1с! "Что бы мы да боги компьютерные на этом говне работали..." отвечали мне они. Настал кризис. Нет больше ентой конторки. |
Читал статьи, из раздела ЧаВо этого форума. Но у меня возникли проблемы.... Не совсем понимаю, чем свойство объекта prototype отличается от свойства __proto__ реализованного в некоторых движках. Они ссылаются на один и тот же объект?
|
Цитата:
У каждого объекта есть внутреннее свойство без имени (в спецификации его обозначают [[Prototype]], в некоторых браузерах оно доступно через __proto__, но это не имя его, а лишь способ доступа), которое обозначает его прототип. Во всех современных браузерах значение этого свойства доступно через Object.getPrototypeOf(obj). Цепочка прототипов объектов определяет путь, по которому у объекта при чтении или записи ищется свойство. Свойство prototype - это обычное свойство с именем "prototype", которое могут иметь объекты. Все пользовательские функции обязательно имеют это свойство, объекты не являющимися функциями могут иметь его, а могут и не иметь. Это свойство особенно полезно, когда пользовательская функция вызывается как конструктор: у новосозданного объекта устанавливается прототип (безымянное свойство, о котором говорилось раннее) равным значению свойства prototype конструктора. Прототипом любой функции является начальное значение Function.prototype. За исключением того, что начальное значение Function.prototype само является функцией. |
oneguy
Спасибо за подробный ответ! Очень благодарен. Стал читать спецификацию ECMA-262 5.1 и некоторые моменты становятся яснее. |
var object = {}; object.constructor.prototype = null; alert(object.toString); var object = {}; object.__proto__ = null; alert(object.toString); |
Подписался на тему, хоть еще не листал.
Взываю в тему годных и интересных (и несложных) задачек на ООП, ну и судью моего скромного решения оной. |
Хотелось бы проверить понимание примеров, приведенных monolithed.
Фактически и Код:
object.constructor.prototype Код:
object.__proto__ В первом случае делая так: Код:
object.constructor.prototype = null; Во втором случае object.__proto__ = null;получается потеряна не только ссылка Код:
object.[[Prototype]] Код:
object.constructor.prototype Раз на объект (прототип) больше не указывает не одной ссылки, он уничтожается сборщиком мусора. Верно ли я понял? :blink: |
Нет, неверно.
При выполнении object.constructor.prototype=null ничего не происходит, потому что object.constuctor равняется Object, а в нём свойство prototype имеет атрибут writable: false. В строгом режиме выдаётся ошибка. "use strict"; var object = {}; object.constructor.prototype = null; При выполнении object.__proto__ = null, у object прототип меняется с Object.prototype на null, при этом объект Object.prototype продолжает существовать, так как на него ещё ссылается много ссылок. |
oneguy,
Ага, получается что строка object.__proto__ = null; просто разрывает связь текущего объекта object с его прототипом Object.prototype, правильно? Тогда такой вопрос, раз Object.prototype продолжает существовать, его как-то можно уничтожить (не в смысле "зачем", просто любопытно)? |
Часовой пояс GMT +3, время: 23:15. |