Сообщение от 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 и т . п.).