В прошлый раз я разобрал часть Ajax, и после прочтения части Advanced Skills Part на этой неделе я также разберу ее.
1. Обнаружение типа
Используйте object.prototype.tostring.call (obj).
Потому что ни тип, ни экземпляр, не могут точно судить типы переменных.
2. Безопасный конструктор
Обычно, когда мы определяем конструкторы, мы будем использовать что -то вроде
Кода -копия выглядит следующим образом:
Функция человека (имя) {
this.name = name;
}
Однако, если вы не переходите к Var Person = New Person («Cnblogs»).
Вместо этого var person = person ("cnblogs"). Затем это будет указывать в другом месте, вызывая загрязнение остальных объектов.
Решение состоит в том, чтобы вынести решение при установлении этого.
Этот экземпляр человека
Если нет, новый человек (x, x, x);
Кода -копия выглядит следующим образом:
Функция человека (имя) {
if (этот экземпляр человека) {
this.name = name;
}еще{
вернуть нового человека (имя);
}
}
Но одно можно отметить, что если другие конструкторы пытаются реализовать наследование через Person.call (this, x) метод.
Следует отметить, что перед инстанцией укажите прототип этой функции на человека.
3. Ленивая функция загрузки
При вызове функции часто существует ситуация, когда функция должна судить о функции браузера.
Например
Кода -копия выглядит следующим образом:
функция создает что -то () {
if (Suportth5) {
// что -нибудь делай
}еще{
// сделать другое
}
}
Однако, если браузер поддерживает функцию, его всегда следует поддерживать, поэтому не нужно делать суждения каждый раз, когда вы выполняете код, потому что один раз достаточно.
Так что это можно переписано
Кода -копия выглядит следующим образом:
функция создает что -то () {
if (Suportth5) {
CreateSomhething = function () {// Перепишите функцию CreateSome Inh чем
// что -нибудь делай
}
}еще{
// так же, как и выше
}
}
Таким образом, вы будете судить, когда вы позвоните в первый раз, и тогда вы, естественно, не вынесете суждение, если переписать функцию.
4. Function Binding
В JS самая запутанная вещь должна быть вопросом, на кого указывает это.
На самом деле, после того, как я так долго изучал JS, я обнаружил вывод
Это в функции будет указывать на объект, который, наконец, вызывает функцию.
Как только вы это выясните, привязка функции не является проблемой.
Методы изменения этого указания в функции - вызов и применение, но функции будут выполняться с использованием этих двух методов.
Если вы не хотите выполнять функцию, но передайте функцию в качестве параметра функции и хотите изменить ее, используйте новейшую Bind.
5. таймер
Хотя SetTimeou, SetInterval или Ajax являются асинхронными, как многопоточное, JS однопоточный.
На самом деле, эти методы не добавляют нить.
SetTimeout (FN, 300) означает помещение FN в очередь выполнения JS после 300 миллисекунд.
Если в очереди нет транзакции (то есть интерпретатор JS простаивает), она будет выполнена немедленно. В противном случае функция будет выполнена после обработки транзакции очереди.
Следовательно, использование SetTimeout или SetInterval не является точным временем управления.
Еще одна вещь, которую следует отметить, это то, что использование SetTimeout для имитации SetInterval может точно управлять интервалом минимального времени выполнения.
6. Используйте таймер, чтобы выполнить метод в фиксированное время.
Если метод должен быть выполнен в течение длительного времени, что может привести к тому, что браузер не реагирует в течение короткого времени, вы можете использовать таймер для выполнения его части каждого периода времени. Это не позволят JS быть занятым постоянно (браузер не отвечает) и будет свободно время для обработки остальных транзакций. Например, если есть петля массива длиной 1000, то вы можете выполнять 100 каждый раз, и интервал между JS простаивает для выполнения других операций.
7. Функциональная дроссельная.
Функциональная дроссель - отличный способ повысить производительность, что в некоторых случаях может повысить эффективность несколько раз.
Например, при перетаскивании или некоторых операциях, которые происходят в событии OnResize.
Каждый раз, когда вы управляете им, вы на самом деле выполняете его много раз. Например:
Кода -копия выглядит следующим образом:
var i = 0;
window.onresize = function () {
console.log (i ++);
}
Если вы попытаетесь растянуть браузер, вы обнаружите, что консоль мгновенно показывает, что I - более 100.
Измените метод написания, например:
Кода -копия выглядит следующим образом:
var i = 0, j = 1;
window.onresize = function () {
if (j % 2 == 0) {
console.log (i ++);
}
J ++;
}
Создайте переменную j и пусть J выполняется каждый раз только тогда, когда есть равномерное число, что означает половину количества выполнения.
При обработке, подобной этой, количество выполнений может быть уменьшено на 50%, но для пользователей разница не может быть ощущена.
Существует также функция дросселя, реализованная с использованием таймера.
Основной код заключается в следующем:
Кода -копия выглядит следующим образом:
Функция дроссельная заслонка (метод, контекст) {
ClearTimeOut (method.Tid);
method.tid = settimeout (function () {
method.call (контекст);
}, 100);
}
Здесь, среда выполнения функции выполнения и функции (то есть наказывающий объект этого в функции выполнения), затем сначала очистите очередь действия, а затем выполните действие.
Эта форма может лучше контролировать частоту действия.
Предполагая, что это действие растяжения браузера, если вы растягитесь достаточно быстро и интервал времени для каждого триггера находится в пределах 100 мс, тогда будет выполнен последний результат.
8. Пользовательские события
Суть - шаблон наблюдателя. Основной шаблон требует 3 функций.
Одна функция - это событие привязки, одна функция - это событие триггера, а другая - удалить привязку.
Этот шаблон может значительно уменьшить сочетание кода.