как известно, всё в яваскрипт является объектами.
"как это всё?" - спросит подкованный читатель, - "а как же примитивные типы?"
а примитивные типы - тоже объекты, только несколько иные...
разберёмся с терминологией:
объект - понятие довольно абстрактное, означающее "некая сущность обладающая состоянием и поведением".
примитивные типы в яваскрипте безусловно обладают и состоянием (собственно значение) и поведением (методы, которые они наследуют от своего прототипа)
пытливый читатель может тут возразить, что на самом деле в случае вызова метода примитивный тип просто конвертится в объект, который уже наследует методы. и будет прав! но это не отменяет того факта, что метод-то мы вызываем для переменной содержащей примитивное значение и от состояния этого значения может быть вызван разный метод и дать, соответственно, разный результат.
каждый примитивный тип имеет своё уникальное поведение: при попытке доступа к полям они конвертятся в свои типы объектов и наследуют соответствующий набор полей от прототипа. значит примитивные типы - тоже объекты.
но что в них такого особенного?
в отличие от остальных объектов примитивне объекты не являются хэш-таблицами, то есть их состояние определяется одним единственным безымянным полем. им нельзя добавить дополнительных полей (в том числе и содержащих функции), но они могут отнаследовать их от прототипа. для доступа к полям при этом используется скрытый автоматически создаваемый объект-посредник, ибо примитивные объекты не могут иметь именованных полей.
основной недостаток яваскрипта заключается в том, что переменная this внутри методов указывает на объект-посредник, а не на примитивный объект, в результате чего внутри метода мы не можем узнать является ли объект, в контексте которого происходит вызов, самостоятельным объектом или объектом-посредником. а это бывает важно в свете того, что передача полноценных объектов происходит по ссылке, а примитивных - по значению.
ps: вот что действительно не является объектами, так это значения null и undefined. и это очень печально (-_-)
Показаны сообщения с ярлыком теория программирования. Показать все сообщения
Показаны сообщения с ярлыком теория программирования. Показать все сообщения
суббота, октября 27, 2007
воскресенье, августа 19, 2007
Кодестайл против собаки
- вы должны каждое слово начинать с большой буквы
- ну.. это ж тянуться к шифту без конца
- это хороший стить
- чем же он хорош?
- позволяет отделять слова друг от друга
- а пробелы разве не для этого?
- пробелы - это плохой стиль
- что за бред?
- это потенциальный источник ошибок: слова можно написать настолько близко друг к другу, что можно не заметить существование пробела, к тому же иногда межбуквенный интервал можно принять за пробел.
- а что мешает использовать интервалы нормальной длинны?
- мне лень такому дауну как ты что-либо доказывать - любой здравомыслящий человек поймёт, что пробелы нельзя использовать нигде и никогда, потому как получается говнокод - нужно использовать "синтаксический сахар" в виде заглавных букв.
- но это не удобно, ужасно смотрится и некоторые заглавные буквы можно спутать со строчными!
- бан бы тебе, с аргументом "непросветлённый"! тема закрыта.
навеяно этим: http://phpclub.ru/talk/showthread.php?s=&threadid=101915
- ну.. это ж тянуться к шифту без конца
- это хороший стить
- чем же он хорош?
- позволяет отделять слова друг от друга
- а пробелы разве не для этого?
- пробелы - это плохой стиль
- что за бред?
- это потенциальный источник ошибок: слова можно написать настолько близко друг к другу, что можно не заметить существование пробела, к тому же иногда межбуквенный интервал можно принять за пробел.
- а что мешает использовать интервалы нормальной длинны?
- мне лень такому дауну как ты что-либо доказывать - любой здравомыслящий человек поймёт, что пробелы нельзя использовать нигде и никогда, потому как получается говнокод - нужно использовать "синтаксический сахар" в виде заглавных букв.
- но это не удобно, ужасно смотрится и некоторые заглавные буквы можно спутать со строчными!
- бан бы тебе, с аргументом "непросветлённый"! тема закрыта.
навеяно этим: http://phpclub.ru/talk/showthread.php?s=&threadid=101915
среда, августа 15, 2007
php и замыкания
как известно в пыхе нет замыканий. некоторые считают это недостатком, потому что замыкания - это черезвычайно мощные штуки, некоторые, наоборот, достоинством, ибо копаться в коде с замыканиями довольно напряжно.
в пыхе сделано тупо, но эффективно - у каждой функции своё пространство имён и если какая-то переменная в ней не определена - значит она не определена и не надо лезть родительский контекст, чтобы в этом убедиться.
однако, в пыхе есть и поруганное многими исключение - директива global позволяющая импортировать переменные из глобального контекста. как говорится: "мысля была хорошей, но родилась она в заднице" :) вместо директивы global лучше бы ввели директиву extern, позволяющую импортировать переменные из родительского контекста - получились бы эдакие "контролируемые замыкания".
интересно, существуют ли уже языки с "контролируемыми замыканиями"?
в пыхе сделано тупо, но эффективно - у каждой функции своё пространство имён и если какая-то переменная в ней не определена - значит она не определена и не надо лезть родительский контекст, чтобы в этом убедиться.
однако, в пыхе есть и поруганное многими исключение - директива global позволяющая импортировать переменные из глобального контекста. как говорится: "мысля была хорошей, но родилась она в заднице" :) вместо директивы global лучше бы ввели директиву extern, позволяющую импортировать переменные из родительского контекста - получились бы эдакие "контролируемые замыкания".
интересно, существуют ли уже языки с "контролируемыми замыканиями"?
Подписаться на:
Сообщения (Atom)