J'ai réglé la partie Ajax la dernière fois, et après avoir lu la partie avancée des compétences cette semaine, je vais également le régler.
1. Détection de type
Utilisez object.prototype.tostring.call (obj).
Car ni le type de non-instance, ne peuvent juger avec précision les types de variables.
2. Constructeur sûr
Habituellement, lorsque nous définissons les constructeurs, nous utiliserons quelque chose comme
La copie de code est la suivante:
fonction de fonction (nom) {
this.name = name;
}
Cependant, si vous n'allez pas à Var Person = New Person ("CNBLOGS").
Au lieu de cela, var personne = personne ("cnblogs"). Ensuite, cela pointera ailleurs, provoquant une contamination du reste des objets.
La solution consiste à porter un jugement lors de la définition de ce.property
Cette instance de personne
Sinon, une nouvelle personne (x, x, x);
La copie de code est la suivante:
fonction de fonction (nom) {
if (cette instance de personne) {
this.name = name;
}autre{
retourner une nouvelle personne (nom);
}
}
Mais une chose à noter est que si les autres constructeurs essaient d'implémenter l'héritage via Person.Call (this, x).
Il convient de noter qu'avant l'instanciation, pointez le prototype de cette fonction à la personne.
3. Fonction de chargement paresseux
Lorsque vous appelez une fonction, il y a souvent une situation où la fonction doit juger la fonction du navigateur.
Par exemple
La copie de code est la suivante:
Fonction CreateoSething () {
if (supporth5) {
// faire quelque chose
}autre{
// faire autre chose
}
}
Cependant, si un navigateur prend en charge une fonction, il doit toujours être pris en charge, il n'est donc pas nécessaire de porter des jugements à chaque fois que vous exécutez le code, car une fois est suffisant.
Donc il peut être réécrit
La copie de code est la suivante:
Fonction CreateoSething () {
if (supporth5) {
createSomething = function () {// réécriture la fonction de création
// faire quelque chose
}
}autre{
// Identique à ci-dessus
}
}
De cette façon, vous porterez un jugement lorsque vous l'appellerez la première fois, puis vous ne porterz pas de jugement si vous réécrivez la fonction.
4. Fonction de la fonction
Dans JS, la chose la plus déroutante devrait être la question de savoir à qui cela pointe.
En fait, après avoir étudié JS depuis si longtemps, j'ai trouvé une conclusion
Dans la fonction, cela pointera vers l'objet qui appelle enfin la fonction.
Une fois que vous avez compris cela, la liaison de la fonction n'est pas un problème.
Les méthodes pour modifier ce pointage dans la fonction sont des appels et des applications, mais les fonctions seront exécutées à l'aide de ces deux méthodes.
Si vous ne souhaitez pas exécuter une fonction, mais passez la fonction en tant que paramètre à une fonction et souhaitez modifier cela, utilisez la dernière liaison.
5. minuteur
Bien que SetTimeou, SetInterval ou Ajax soient asynchrones, comme le multi-threading, JS est unique.
En fait, ces méthodes n'ajoutent pas de fil.
Settimeout (FN, 300) signifie mettre FN dans la file d'attente d'exécution de JS après 300 millisecondes.
S'il n'y a pas de transaction dans la file d'attente à exécuter (c'est-à-dire que l'interprète JS est inactif), il sera exécuté immédiatement. Sinon, la fonction sera exécutée après le traitement de la transaction de file d'attente.
Par conséquent, l'utilisation de setTimeout ou SetInterval n'est pas un temps de contrôle précis.
Une autre chose à noter est que l'utilisation de setTimeout pour simuler SetInterval peut contrôler avec précision l'intervalle de temps d'exécution minimum.
6. Utilisez une minuterie pour exécuter la méthode en temps fixe.
Si une méthode doit être exécutée pendant longtemps, ce qui peut amener le navigateur à ne pas répondre pendant une courte période, vous pouvez utiliser une minuterie pour en exécuter une partie à chaque période de temps. Cela empêchera JS d'être occupé tout le temps (le navigateur ne répond pas) et a du temps libre pour gérer le reste des transactions. Par exemple, s'il y a une boucle de tableau de 1000 longueurs, vous pouvez en exécuter 100 à chaque fois, et l'intervalle entre JS est inactif pour effectuer d'autres opérations.
7. Fonction étrangle.
La limitation de la fonction est un excellent moyen d'améliorer les performances, ce qui peut améliorer l'efficacité plusieurs fois dans certains cas.
Par exemple, lors de la traînée ou des opérations qui se produisent dans l'événement OnResize.
Chaque fois que vous l'exploitez, vous l'exécutez plusieurs fois. Par exemple:
La copie de code est la suivante:
var i = 0;
window.onresize = function () {
console.log (i ++);
}
Si vous essayez d'étirer le navigateur, vous constaterez que la console montre instantanément que le I est supérieur à 100.
Modifiez la méthode d'écriture, par exemple:
La copie de code est la suivante:
var i = 0, j = 1;
window.onresize = function () {
if (j% 2 == 0) {
console.log (i ++);
}
j ++;
}
Créez une variable J et laissez J exécuter à chaque fois uniquement lorsqu'il y a un nombre pair, ce qui signifie la moitié du nombre d'exécutions.
En traitant comme celui-ci, le nombre d'exécutions peut être réduit de 50%, mais pour les utilisateurs, la différence ne peut pas être ressentie.
Il existe également une fonction de fonctionnement implémentée à l'aide d'un minuteur.
Le code central est le suivant:
La copie de code est la suivante:
Fonction de l'accélérateur (méthode, contexte) {
ClearTimeout (Method.tid);
méthode.tid = setTimeout (function () {
Method.Call (contexte);
}, 100);
}
Ici, l'environnement d'exécution de la fonction d'exécution et de la fonction (c'est-à-dire l'objet pointant de cela dans la fonction d'exécution), puis effacez d'abord la file d'attente d'action, puis exécutez l'action.
Cette forme peut mieux contrôler la fréquence de l'action.
En supposant qu'il s'agit d'une action d'étirement du navigateur, tant que vous étirez suffisamment rapidement et que l'intervalle de temps pour chaque déclencheur est à moins de 100 ms, le dernier résultat ne sera exécuté que.
8. Événements personnalisés
L'essence est le modèle d'observateur. Le modèle de base nécessite 3 fonctions.
Une fonction est un événement de liaison, une fonction est un événement de déclenchement et l'autre consiste à supprimer la liaison.
Ce modèle peut réduire considérablement le couplage de code.