Рождается новый browser и в связи с этим несколько вопросов.
Сначала о тех фичах которые есть:
1) HTML/XHTML и CSS — level 2.1 (не всё) + level 3 (не все, всякие полезные штуки оттуда)
см. здесь и здесь.
2) Градиетнтный background, expandable image (например закругленные бордюры и пр.), см. здесь. Поддержка alpha канала.
3) %% units — позволяют делать vertical alignment и flex в стиле XUL. здесь
4) flow:horizontal — размещение блоков слева направо в контейнерах (flow:vertical — стандартное поведение DIV контейнера — сверху вниз)
5) Кроме поддержки position:relative/absolute/fixed добавлено также position:popup — создание не блокирующих popup окон типа menu и tooltip.
6) lightweight frames — например absolute div в контейнере может быть рамещен поверх дочернего frame.
<frameset> аналогичен <iframe> т.е. может быть включен в любое место HTML (а не как отдельная сущность)
7) display: inline-block из CSS2.1 имплементирован — кстати ни один броузер из большой тройки эту фичу так и не поддерживает (за искл. частично IE).
8) CSS атрибут behavior:name-of-js-object. Где name-of-js-object есть JS конструкция
Здравствуйте, c-smile, Вы писали:
CS>Рождается новый browser и в связи с этим несколько вопросов.
CS>И один принципиальный вопрос про JS:
CS>Пользуется ли народ кострукциями prototype в быту?
Да конечно, это вообще-то основа JavaScript ... Прототипированный язык
MyObject.prototype=
{
field = 100,
MyFunction = function(){"some";}
}
Получается что-то типа объекта в других языках. Далее прототипы используются для наследования, то есть один прототип служит основой для другого прототипа, а нужные свойства и функции добавляются.
Ох блин, когда-то давно я интересовался судьбой javascript 1.5 там очень много нехватающих лично мне вещей было реализовано, но боюсь так просто не вспомню Будет время — гляну, мож чего вспомню ...
Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
CS>Кстати есть конструкция property (то же что и function только вызов ея устроен по другому. )
Вот это обязательно!
[skip]
CS>Если кто дочитал до этого места — большое человеческое спасибо. Комментарии очень нужны.
Здравствуйте, c-smile, Вы писали:
CS>Рождается новый browser и в связи с этим несколько вопросов.
"... Выключите свет, они на свет лезут!!!" (с) один анекдот
Личего личного
Здравствуйте, Andir, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Пользуется ли народ кострукциями prototype в быту? A>Да конечно, это вообще-то основа JavaScript ... Прототипированный язык
Я не про то. Естественно JS прототипированный.
Я немного про другое: вот в этом примере:
MyObject.prototype=
{
field = 100,
MyFunction = function(){"some";}
}
Как создается объект класса MyObject что такое этот MyObject объект или функция?
В моем варианте функция/конструктор MyObject и является prototype
function MyObject()
{
this.field = 100,
}
MyObject.MyFunction = function(){"some";} // прицепили метод
MyObject.MyCommonVar = "some"; // прицепили свойство общее для всех instance порожденных с пом MyObjectvar myObject = new MyObject();
myObject.MyFunction();
Я не понимаю зачем нужно было вводить отдельное свойство prototype.
В моем варианте myObject.__proto__ === MyObject
В JS myObject.__proto__ === MyObject.prototype
Более того в JS myObject.constructor === Object-internal-ctor ,
я ожидал что это должно быть myObject.constructor === MyObject
Вообще это мрак как это сделано в JS....
Вот я и спрашиваю этим кто-то реально пользуется.
Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
A>Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
Там не только дебаггер будет. Планируется CSS inspector:
При наведении мыши на элемент можно будет увидеть все его CSS атрибуты с конкретным указанием
из какого definition/css конкретное свойство каскадировалось. И еще много чего на эту тему.
Броузер позиционируется как инструментальный.
CS>>Кстати есть конструкция property (то же что и function только вызов ея устроен по другому. ) A>Вот это обязательно!
Здравствуйте, c-smile, Вы писали:
CS>Я не понимаю зачем нужно было вводить отдельное свойство prototype.
function MyObjectBase(){}
MyObjectBase.prototype = {} // Some prototype;function MyObject(){}
MyObject.prototype = new MyObjectBase(); // Наследование
MyObject.prototype.NewFunction = function() {} // Some new functionality
Прототипирование это, что каждый объект создаётся по некоторому прототипу, в том числе и наследование реализуется через прототипирование.
Далее динамическое расширение существующего объекта тоже возможно только через прототипы.
Плюс я понять не могу, о чём ты говоришь, когда про функции объекта говоришь:
function MyObject() {/* конструктор объекта */ }
// Прототип объекта
MyObject.prototype =
{
field = 100, // default value
MyFunction: function() { print(this.field); }
}
var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj1.field = 1;
var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj2.field = 2;
myObj1.MyFunction(); // Печатает 1
myObj2.MyFunction(); // Печатает 2
myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
myObj2.MyFunction(); // Печатает Hello, World!
Как такое реализовать без прототипов я даже не представляю. Приведи пример, может я неправильно понимаю ?
CS>Вот я и спрашиваю этим кто-то реально пользуется. CS>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
Я в исходники выкладывал EventFramework ...
A>>Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
CS>Там не только дебаггер будет. Планируется CSS inspector: CS>При наведении мыши на элемент можно будет увидеть все его CSS атрибуты с конкретным указанием CS>из какого definition/css конкретное свойство каскадировалось. И еще много чего на эту тему. CS>Броузер позиционируется как инструментальный.
Бороться с мозиллой боюсь на этом фронте будет тяжеловато
A>function MyObject() {/* конструктор объекта */ }
A>// Прототип объекта
A>MyObject.prototype =
A>{
A> field = 100, // default value
A> MyFunction: function() { print(this.field); }
A>}
A>var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
A>myObj1.field = 1;
A>var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
A>myObj2.field = 2;
A>myObj1.MyFunction(); // Печатает 1
A>myObj2.MyFunction(); // Печатает 2
A>myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
A>myObj2.MyFunction(); // Печатает Hello, World!
A>
A>Как такое реализовать без прототипов я даже не представляю. Приведи пример, может я неправильно понимаю ?
А если так?
function MyObject() { this.somefield = 10; }/* конструктор объекта он же и прототип!*/ }
MyObject.field = 100, // default value
MyObject.MyFunction = function() { print(this.field); }
var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj1.field = 1;
var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj2.field = 2;
myObj1.MyFunction(); // Печатает 1
myObj2.MyFunction(); // Печатает 2
myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
myObj2.MyFunction(); // Печатает Hello, World!
MyObject.MyFunction = function() { print("Hello Universe!");} /* Переопределяем функцию для всех остальных экземпляров класса */
A>Я в исходники выкладывал EventFramework ...
О! вот спасибо!
Это где-то реально используется?
Кто-нить видел живые активные библиотеки где это используется?
A>Бороться с мозиллой боюсь на этом фронте будет тяжеловато
Зачем бороться? Надо жить рядом.
Мой броузер это моно exe файл размером примерно 900к несжатых.
Инсталятора не требует. Ткнул — поехали.
А это работать вообще будет? Ведь таким образом определяемые функции это как статические функции в C++, то есть ни о каком this и речь идти не может.
CS>
CS>function MyObject() { this.somefield = 10; }/* конструктор объекта он же и прототип!*/ }
CS>MyObject.field = 100, // default value
CS>MyObject.MyFunction = function() { print(this.field); }
CS>var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
CS>myObj1.field = 1;
CS>var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
CS>myObj2.field = 2;
CS>myObj1.MyFunction(); // Печатает 1 У объекта myObj1 нету функции MyFunction ... она есть только у MyObject
CS>myObj2.MyFunction(); // Печатает 2
CS>myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
CS>myObj2.MyFunction(); // Печатает Hello, World!
CS>MyObject.MyFunction = function() { print("Hello Universe!");} /* Переопределяем функцию для всех остальных экземпляров класса */
CS>
A>>Я в исходники выкладывал EventFramework ...
CS>О! вот спасибо! CS>Это где-то реально используется? CS>Кто-нить видел живые активные библиотеки где это используется?
Ну на rsdn есть поиск, кто-то да использовал ... А я постоянно его пользую в корпоративных системах на web-интерфейсе.
Ещё примеров валом в мозилле, там же все механизмы расширения JavaScript используют.
CS>Мой броузер это моно exe файл размером примерно 900к несжатых. CS>Инсталятора не требует. Ткнул — поехали.
Вот это круто А системы расширения какие-то подразумеваются?
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Aquary, Вы писали:
A>>Личего личного
CS>Угу. Я уже сейчас по тестам бью Оперу в разы
В разы!?!?! Это круто!
CS>А уж по цене подвано — бесплатный броузер будет.
Это вы один делаете?
Здравствуйте, c-smile, Вы писали:
CS>Вот я и спрашиваю этим кто-то реально пользуется. CS>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
Здравствуйте, korzhik, Вы писали:
CS>>А уж по цене подвано — бесплатный броузер будет. K>Это вы один делаете?
На этой фазе, да, один.
"Лужу, паяю, ЭВМ починяю".
Где-то через недели две потребуются например дизайнеры "морды лица"
т.е. нужно соорудить — базовый скин + раскладку основного окна.
Нужна также имплементация всяких диалогов settings и пр. HTML/CSS/JS
В моем JS (c-smile downgraded into ECMAScript) есть persistence — т.е. в принципе все можно сделать на голом JS.
Все у кого есть желание / возможности — welcome — e-mail: news@terrainformatica.com.
CS>>А если так? A>А это работать вообще будет? Ведь таким образом определяемые функции это как статические функции в C++, то есть ни о каком this и речь идти не может.
Уже работает.
Мужики, я четко знаю как устроено наследование в JS потому как заимплементировал его перерыв соотв. стандарты и пр. Т.е. я не спрашиваю "как?" а наоборот "почему?".
Почему в качестве прототипа используется специальный подобъект
MyObject.prototype а не сам MyObject ? Ведь и Function (MyObject) и Object (MyObject.prototype) есть
"вешалки для свойств" совершенно идентичные и даже более того:
class Function: public Object {} в терминах C++.
Т.е. мой вопрос архитектурно-философский.
CS>>Мой броузер это моно exe файл размером примерно 900к несжатых. CS>>Инсталятора не требует. Ткнул — поехали.
A>Вот это круто А системы расширения какие-то подразумеваются?
Да. Но только т.н. windowless extensions в виде "native behaviors"
назначаемых объекту через CSS. В движке h-smile на котором строится browser есть понятие
view master css — css который грузится для всех документов.
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Вот я и спрашиваю этим кто-то реально пользуется. CS>>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
A>подробно про прототипы: A>http://www.dklab.ru/chicken/nablas/39.html A>http://www.dklab.ru/chicken/40.html
Некоторые посылки в этих статьях вызывают сомнения.
Например:
Итак, вывод: прототипы объектов доступны по цепочке obj.constructor.prototype.constructor.prototype..., а не obj.prototype.prototype, как можно понять из многих руководств по JavaScript в Интернете. Конструктором объекта может быть только объект встроенного класса (обычно это Function).
Кроме того что статьи имхо окончательно запутывают проблему.
Я же пытаюсь упростить проблему выкинув промежуточные "prototype".
если охота понять зачем нужен prototype или еще что-то по ДжаваСкрипту, скачай стандарт ECMA-262 (ECMAScript) где-то с www.ecma.ch по-моему.
и все вопросы отпадут. детальнее чем там нигде нету
Здравствуйте, yxiie, Вы писали:
Y>если охота понять зачем нужен prototype или еще что-то по ДжаваСкрипту, скачай стандарт ECMA-262 (ECMAScript) где-то с www.ecma.ch по-моему. Y>и все вопросы отпадут. детальнее чем там нигде нету
спасибо.но это было первое с чего я начал.
еще раз повторю вопрос:
Почему
myObjectInstance.__proto__ указывает на MyObject.prototype
а не на MyObject просто?
Зачем для каждой функции (класса) MyObject создается специальный подобъект MyObject.prototype
Почему для этого не используется сам MyObject.
В Java (не script) и в других OOP языках есть тольуо две сущности: instance и class
Не морочь себе голову ИМХО. Есть уже интерпритатор готовый? Прикурчивай по минимуму и начинай тестировать. Если важно это дело с прототипами, то оно всплывет. Попроси народ накидать нетривиальных примеров использования javascript и пробуй.
Я правда не очень понимаю, как ты собираешься его прикручивать. ДОМ-то твой не настоящий, а что за javascript без ДОМа?
ОФФ: I'll be back. В смысле проект мой, занимающий почти все мое свободное время, близиться к концу.