Pull to refresh
442
0
Mikhail Davydov @azproduction

Frontend/Node.js JavaScript

Send message
Дело в том, что Отец изменил свой прототип (Father.prototype.color = 'green';), а поиск свойства color лежит сперва через прототип отца. Вот так выглядит объект f:
f = {
    __proto__: { // Прототип Father
        color: 'green', // Отец решил вернуть цвет
        __proto__: { // Прототип Grandfather
            color: 'blue', // Дед решил поменять на синий 
            __proto__: Object.prototype
        }
    }
}

При выполнении f.color сначала произойдет поиск в собственных свойствах (не найдено), затем алгоритм будет искать в f.__proto__ — найдено! (color: 'green'). Вобщем до прототипа деда и не дойдет.
Если же отец удалит цвет из своего прототипа, то все опять «телепатически» посинеют, кроме сына у которого есть собственное свойство color.
Использовал Eclipse+Plugins, Aptana, Netbeans. Сейчас остановился на WebStorm.
Это понятно. Проблема не в типе записи двоичного числа, а в возможности преобразовать массив в двоичную строку — нет метода toBinaryString() или подобного.
Отчасти верно, но как используя его записать двоичное число (big-endian, little-endian, middle-endian)?!
Все верно. Я на всякий случай написал ;)
Если выполнить вот этот код в глобалах, то мы получим ссылку на глобальную переменную:
"use strict";
(function(global){
    // global
})(this);

Но такой трюк нельзя провернуть внутри другого scope: this будет undefined. Добавлю этот 4-й почти идеальный вариант.
Уточню, что именно такой код не корректно запускать в консоли ("use strict" не сработает).
(function () {
    "use strict";
    var global = (function(global){ 
        return global;
    })(this);
    return global; // undefined
}());

Почему так происходит можно узнать в статье JavaScript Strict Mode § Почему я не могу включить Strict Mode в консоли моего браузера?
Позор мне, непонятно где была моя мысль… Конечно, Дед — это Grandfather. Исправил.
Вопрос:
Стоит ли использовать childProcesses в node.js для каждого запроса в высоко-нагруженных проектах?

Ответ:
Для каждого запроса ни в коем случае не стоит использовать childProcesses потому, что мы получаем слишком много накладных расходов (это как PHP с апачем): выделение памяти, время форка, время инициализации (jid компиляция) и т.п. Node.js очень хорошо распределяет нагрузку и загружает одно ядро процессора в своем «evented processing loop» — основной поток приложения. Идеальная загрузка для Node.js — по 1му форку на ядро, лучше всего форкать, используя github.com/LearnBoost/cluster Кластер будет выступать в роли мастеров(балансир), а форки — слэйвы. Оправдано использование childProcesses для тяжелых запросов.
Можно ещё почитать тут: stackoverflow.com/questions/3491811/node-js-and-cpu-intensive-requests

Вопрос:
В node.js при использовании runInNewContext пропадают глобалы, а именно нет console.log Как правильно с этим бороться? Можно конечно в контекст добавить ссылку на console, но если понадобится еще какой-то глобальный элемент, а потом еще и еще… не прописывать же все? Думаю можно пройти в цикле по глобалу и передать все доступные объекты в контекст. Но насколько это правильно, может существует другое решение?
Речь идет о node-js.ru/12-control-context-using-runinnewcontext

Ответ:
Если понадобится другой объект, то придется добавить — такова политика сендбоксинга.
Единственное применение данной технологии я вижу для запуска чужого, потенциально опасного кода (так делает хостинг Node.js — nodester). Если же критической в этом необходимости нет, то я категорически против этого — это совершенно не нужная обертка, которую можно не использовать если выбрать правильную архитектуру приложения и использовать договоренности при разработке. Чем плохо: создание/удаление контектса — выделение памяти как следствие частый GC (который блокирует все приложение). Думаю будут проблемы с поддержкой такого кода.
Вопрос:
Какая модель создания объектов наиболее удобная? Если с new, то как защищаетесь от ошибок:
1. Функции-конструкторы пишу всегда с большой буквы;
2. Проверяют валидность создания через this instanceof Имя_функции (избегаю this instanceof arguments.callee по соображения производительности)
3. Аналогично второму, но сверяюсь с window, т.к. не хочу хардкодить имя и не пишу скрипты для out-of-browser сред.

Ответ:
Лучше, привычнее и идеологические создавать объекты через new. Конструкторы стоит называть с заглавной буквы.
Я предпочитаю основываться на соглашениях и не проверяю this внутри конструктора — вызвал конструктор без new и поэтому утекло в глобалы — значит «сам дурак». И не в коем случае не поощряю ошибку с new — некоторые проверяют если this это глобал значит пользователь вызвал конструктор без new и создают внутри конструктора объект и возвращают его — это поощрение ошибки и идеологически не верный подход.

Используя "use strict" все значительно проще:
var Obj = function () {
    "use strict";
    this.pew = 100;
};

// Правильно
new Obj.pew++;

// пользователь словит ошибку
Obj(); // TypeError: this is undefined

new не приемлем для factory методов, и коротких конструкторов — jQuery
Вопрос:
«Суть такая мне нужно не используя jquery (будет как собственное АПИ сайта) создать аналог функции $.ajax (а/синхронный запрос )
нашел в интернете пример создания объектов: ru.wikipedia.org/wiki/XMLHttpRequest
но проблема в firefox, не работает, но проблем больше чем просто firefox, то авторизация то еще что нибудь)
Создал тему на форуме www.sql.ru/forum/actualthread.aspx?tid=853420 даже на таком форуме ответов нет.
Есть ли какая нибудь универсальная кросс браузерная функция ?»

С форума sql:
The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied.

Ответ: Приведу в качестве примера недавно созданную функцию. Похоже ваш сервер требует basic auth, поэтому сразу изменю функцию:
function xhr(m,u,c,p,l,s,x){
    with(new(this.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP"))
    onreadystatechange=function(x){readyState^4||c(x)},open(m,u,false,l,s),send(p)
}
// Использование
xhr('get', 'http://path.to/server?with=parameters', function (xhr) {
    alert(xhr.status + ':' + xhr.responceText);
}, null, "username", "password");
Нет. Это обман зрения :) Давайте разберем: var N = 3, a; while (a in [1..N]) ...

1. мы у 1.0 (1.) пытаемся получить свойство N через точечную нотацию — его нет, поэтому 1..N возвратит undefined. Переменная N объявлена для отвлечения и никакой нагрузки не несет.
2. в итоге мы имеем массив [undefined] - (0: undefined),
3. дальше мы пытаемся узнать, а есть ли что-то с ключем undefined (a===undefined) в нашем массиве — a in [undefined] получаем false.

Сколько раз отработает alert?: Ответ в обоих случаях — 0
ASUS? Окупаются ли ваши вложения в 180000р?
// jQuery
$(window).bind('click', function (e) {
    console.log('Clicked on ', e.target);
});
Использовал nodester (подобие Heroku для Node.js) для запуска сервера распределенных вычислений на JavaScript. Он базируется на Amazon EC2. Ничего плохого сказать не могу.
А я вижу — путать людей не посвященных в JavaScript :) Вот вам quiz:
var N = 3;
while (1..N) {
    alert(0); // <<< Сколько раз отработает alert?
}

// или вот так
var N = 3;
while (a in [1..N]) {
    alert(a); // <<< Сколько раз отработает alert и что выведет?
}
Чтобы не путать читателей уточню:
null — примитивное значение, представляющее нулевую, пустую, не существующую ссылку
undefined — примитивное значение, которое получает каждая перемененная по умолчанию (когда переменная не имеет значение)
void — оператор (т.е. скобки не нужны), выполняющий выражение и всегда возвращающий undefined

В JavaScript, кстати, каждая функция по умолчанию возвращает undefined
(function(){}()) === void 0 // true
ещё вариант с xor'ом
a^1&&console.log("not one");
// читабельнее чем ~-a
Парсер, когда же ты наконец перестанешь переделывать ) в коде на ©?
Хватит и 118
function xhr(m,u,c,x){with(new XMLHttpRequest)onreadystatechange=function(x){readyState^4||c(x.target)},open(m,u),send©}

Кросс-браузерный немного длиннее
function xhr(m,u,c,x){with(new(this.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP"))onreadystatechange=function(x){readyState^4||c(x)},open(m,u),send©}

Usage:
xhr('get', '//ya.ru/favicon.ico', function(xhr){console.dir(xhr)});
Ещё вопрос:
«Как с помощью JS сделать одновременный выбор и загрузку нескольких файлов?»

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Registered
Activity