Показать сообщение отдельно
  #9 (permalink)  
Старый 08.05.2011, 13:12
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Lerayne
полностью ли корректна такая его реализация
вполне, только функция $extend создается при каждом вызове. Достаточно создавать один раз. Если она не нужна в глобальной области видимости, можно оформить замыканием:

var Class = (function() {

var $extend = function() {/* ..... */};

return function(parent, declaration) {
    /* все как в твоем примере, только без $extend */
    var Klass = function() {
        this.initialize.apply(this, arguments);
    }
    /* ..... */
};

})();


Сообщение от Lerayne
имеет ли какое-то значение использование $ в названиях функций и свойств
нет. Используют, когда имя уже занято или просто для красоты. Иногда используют для смыслового отделения от контекста выполнения, например, $extend это тоже, что и window.$extend , если убрать $, получится window.extend и теперь, судя по имени, эта функция должна дописывать свойства в window, но она делает немного другое, вот я и добавил $.

Сообщение от Lerayne
что дает наличие Object.extend
Object.extend - это почти родное место для этой функции (в идеале конечно Object.prototype.extend в сочетании с флагом DontEnum, но этот флаг понимают только последние интерпретаторы, а без него будут проблемы: http://andir-notes.blogspot.com/2009...prototype.html). $extend нужен, потому что обращаться через Object.extend не очень удобно, а функция применяется часто.

Сообщение от Lerayne
Немного смутило свойство Klass.$super. Если это замена .superclass, то как она работает?
"super" - это ключевое слово, зарезервированное на будущее. В будущем (может быть) оно будет ссылкой на родительский класс. Что бы не использовать занятое слово добавляется $ или выбирается другое слово (superclass, parent и т . п.).

Последний раз редактировалось Riim, 08.05.2011 в 13:16.
Ответить с цитированием