> А можно увидеть ваши 4-15 строк, делающий все перечисленное в статье?
Самый простой и классический пример (паттерн).
function inheritePrototype(child, _super) {
var __inheritance = function () {};
__inheritance.prototype = _super.prototype;
child._super = _super;
child.prototype = new __inheritance();
child.prototype.constructor = child;
}
// пример
function A() {
this.state = 10;
}
A.prototype.test = function () {
alert('A.test');
};
function B() {
B._super.apply(this, arguments);
}
inheritePrototype(B, A);
B.prototype.test = function () {
B._super.prototype.test.apply(this, arguments);
alert('B.test');
};
var b = new B();
b.test();
alert(b.state);
Естественно, можно оформить в нужном виде (например, свойством функции или ещё как), но внутренности — есть одна из реализаций, того, что Вам нужно. Можно наследоваться, вызвать одноименные методы и базового конструктора. То, что у Вас названо статическими свойстами — можно так же положить в прототип, или сделать свойствами коструктора.
Да, на всякий сайтах работы, как правило, в качестве работодателей сидят девочки-рекрутёры, которые далеки от этих слов. Их задача пригласить на собеседование человека для проверки личностных качеств. А уже дальше, если он подойдёт, его направят в компанию, где будет уже разговор о Python и Django, а не Pithon и Jamba.
Всего-то пару селекторов и «цикл» (в 6-7 строчках из 268). Я имею в виду, что то же самое можно было сделать без JQ (и там не «велосипеды» были бы даже), и Вы не обрекли бы пользователей своего скрипта цеплять ещё тонну кода.
Ты про исходники движка JS в Опере? Не знаю, может быть, я не смотрел их (только Sdiper Monkey и Rhino смотрел). В Spider Monkey, там однозначно можно определить по типу (js_ArrayClass).
Ну, а, если говорить об ECMA, то там тип Array не выделяется отдельно.
> ну реально не понятно откуда и как ожидать многие должны были 000111222?
Всё дело в глобальных и локальных переменных. Переменные внутри функции с ключевым словом var считаются локальными в пределах этой функции:
function test() {
var a = 10; // локальная переменная, видна только внутри функции test
alert(a);
}
test(); // 10
alert(a); // ошибка, нет такой переменной в глобальной области
В свою очередь, если в коде встречается присвоение «переменной» без ключевого слова var, то такая переменная всегда будет глобальной (выполните код выше, только без var, просто a = 10; увидите, что переменная «a» стала глобальной и доступна за пределами функции).
Поэтому цикл, запускаемый в глобальной области, сработает всего один раз, т.к. условие «q < 3» будет истинно после первого выполнения функции «makeSomeAction( q );» (внутри функции используется та же глобальная переменная, которая по выходу из внутреннего цикла, будет иметь значение 3).
> makeSomeAction( someVariable ) — это просто так захотелось назвать или чтото значит?
А, т.е., всё-таки, JS для Вас — новая технология? И своими наработками, интересными решениями (возможно, сторонними) и т.д. к моменту появления либ типа jQuery, Prototype и т.д. Вы не успели обрасти? Ну это не страшно, вероятно наработки сторонних либ показались изящней ;)
Ну вот очень вероятно, что при таких Ваших высоких знаниях и профессионализме (ну а как же? — в сторонней либе легко быстро разберусь, допишу, адаптирую, просмотрю, проанализирую, оптимизирую и т.д. ;)), у Вас, к тому моменту, как Вы столкнулись с этими библиотеками, должны были существовать свои — отточенные и надёжно работающие. Я не прав? ;)
А, слово «скрипт» сбило с толку. Хорошо, перефразирую — при входе в контекст исполнения, но до начала его исполнения. Если контекст один — глобальный, то тут можно сказать и «весь скрипт».
> The scope of…
А тут уже говорится про scope (область видимости).
Ну, если Вы в силах расширить, дописать, виджет, почему нет? Значит Вы отлично знаете предыдущий уровень абстракции, и нечего волноваться. «Это» вписывается в Ваше относительное «нормально» — ну и всё.
> я предпочитаю пользоваться наивысшим доступным уровнем абстракции
Да, туда, в принципе, всё движется.
Хотя, зависит это от задач. Если у Вас какой-то среднестатистический сайт — то вполне подойдут обобщённые, не оптимальные, решения, если высоконагруженный проект, где нужно выжимать мелочи, то Вы будете оптимизировать эти скрипты, либо напишите свои. Главное, чтобы вы действительно смогли доработать, расширить и т.д. стороннюю разработку. А иначе, можно услышать: «Этот фреймворк такого не поддерживает :(, мы не можем это реализовать, т.к. наш проект полностью завязан на него». Если это не про Вас — смело используйте любую абстракцию на относительно приемлемом для Вас уровне.
Да нет, конечно, это замечательно, особенно, если Вы, как профи, готовы подписаться под «отлаженные, проверенные». Передача и синтез знаний — это хорошо.
> О, а я еще ОС использую в которой не могу ответить за каждую строчку, и вебсервер, и интерпретатор, ужас!
О, а эту тему я называю «уровни абстракции», на которых программист подключается к своему творческому пути.
Самый простой и классический пример (паттерн).
function inheritePrototype(child, _super) { var __inheritance = function () {}; __inheritance.prototype = _super.prototype; child._super = _super; child.prototype = new __inheritance(); child.prototype.constructor = child; } // пример function A() { this.state = 10; } A.prototype.test = function () { alert('A.test'); }; function B() { B._super.apply(this, arguments); } inheritePrototype(B, A); B.prototype.test = function () { B._super.prototype.test.apply(this, arguments); alert('B.test'); }; var b = new B(); b.test(); alert(b.state);Естественно, можно оформить в нужном виде (например, свойством функции или ещё как), но внутренности — есть одна из реализаций, того, что Вам нужно. Можно наследоваться, вызвать одноименные методы и базового конструктора. То, что у Вас названо статическими свойстами — можно так же положить в прототип, или сделать свойствами коструктора.
Впрочем, конечно, Вам решать ;)
Ты про исходники движка JS в Опере? Не знаю, может быть, я не смотрел их (только Sdiper Monkey и Rhino смотрел). В Spider Monkey, там однозначно можно определить по типу (js_ArrayClass).
Ну, а, если говорить об ECMA, то там тип Array не выделяется отдельно.
Инструкции, выражения JS. Код JS.
> ну реально не понятно откуда и как ожидать многие должны были 000111222?
Всё дело в глобальных и локальных переменных. Переменные внутри функции с ключевым словом var считаются локальными в пределах этой функции:
function test() { var a = 10; // локальная переменная, видна только внутри функции test alert(a); } test(); // 10 alert(a); // ошибка, нет такой переменной в глобальной областиВ свою очередь, если в коде встречается присвоение «переменной» без ключевого слова var, то такая переменная всегда будет глобальной (выполните код выше, только без var, просто a = 10; увидите, что переменная «a» стала глобальной и доступна за пределами функции).
Поэтому цикл, запускаемый в глобальной области, сработает всего один раз, т.к. условие «q < 3» будет истинно после первого выполнения функции «makeSomeAction( q );» (внутри функции используется та же глобальная переменная, которая по выходу из внутреннего цикла, будет иметь значение 3).
> makeSomeAction( someVariable ) — это просто так захотелось назвать или чтото значит?
Просто название функции, так захотелось.
с тем же
var X = function () {}; X.prototype = []; var x = new X(); isArray(x); // true :(В общем случае, полагаться на реализации тоже не стабильно — хрен знает, насколько та или иная реализация отойдёт от стандарта.
> The scope of…
А тут уже говорится про scope (область видимости).
На предмет чего?
Да, туда, в принципе, всё движется.
Хотя, зависит это от задач. Если у Вас какой-то среднестатистический сайт — то вполне подойдут обобщённые, не оптимальные, решения, если высоконагруженный проект, где нужно выжимать мелочи, то Вы будете оптимизировать эти скрипты, либо напишите свои. Главное, чтобы вы действительно смогли доработать, расширить и т.д. стороннюю разработку. А иначе, можно услышать: «Этот фреймворк такого не поддерживает :(, мы не можем это реализовать, т.к. наш проект полностью завязан на него». Если это не про Вас — смело используйте любую абстракцию на относительно приемлемом для Вас уровне.
ну да, на данный относительный критерий посягать вряд ли стоит
> Почему бы не…
Да нет, конечно, это замечательно, особенно, если Вы, как профи, готовы подписаться под «отлаженные, проверенные». Передача и синтез знаний — это хорошо.
> О, а я еще ОС использую в которой не могу ответить за каждую строчку, и вебсервер, и интерпретатор, ужас!
О, а эту тему я называю «уровни абстракции», на которых программист подключается к своему творческому пути.