Maison interface Web js tutoriel javascript当中的代码嗅探扩展原生对象和原型(prototype)_javascript技巧

javascript当中的代码嗅探扩展原生对象和原型(prototype)_javascript技巧

May 16, 2016 pm 05:43 PM
prototype

:翻译之中有什么不恰当的地方,欢迎大家指正,祝大家双节快乐!
如果不是有特殊需要而去扩展原生对象和原型(prototype)的做法是不好的

复制代码 代码如下:

//不要这样做
Array.prototype.map = function() {
// 一些代码
};

除非这样做是值得的,例如,向一些旧的浏览器中添加一些ECMAScript5中的方法。
在这种情况下,我们一般这样做:
复制代码 代码如下:

if (!Array.prototype.map) {
Array.prototype.map = function() {
//一些代码
};
}

如果我们比较偏执,为了防止别人将map定义为其它意想不到的值,像true或其他,我们可以 将检测代码改为下面这样:
复制代码 代码如下:

if (typeof Array.prototype.map !== "function") {
Array.prototype.map = function() {
// 一些代码
};
}

(尽管这将破坏其它开发者的map定义,并影响他们功能的实现)
但是,在一个充满敌意和残酷竞争的环境下(换句话说,但你提供或者使用一个js库时),你不应该相信任何人。如果其他人的js代码先于你的js代码加载,并且以某种方式定义了一个不完全兼容ES5的map()方法,导致你的代码不能正常运行,该怎么办呢?

不过,你可以相信浏览器,如果Webkit内核实现了map()方法,你可以放心,这个方法肯定会正常运行。否则的话,你就要用你的代码进行检测了。

幸运的是,这在JavaScript当中很容易实现,当你调用原生函数的toString方法的时候,会返回一个函数的字符串,该函数的函数体是[native code]。
例如在Chrome的控制台下:
复制代码 代码如下:

> Array.prototype.map.toString();
"function map() { [native code] }"

一个适当的代码检查向来就是一个稍微令人不快的事,因为不同浏览器对空格和换行处理的太过轻率。测试如下:
复制代码 代码如下:

Array.prototype.map.toString().replace(/\s/g, '*');
// "*function*map()*{*****[native*code]*}*" // IE
// "function*map()*{*****[native*code]*}" // FF
// "function*map()*{*[native*code]*}" // Chrome

只简单的去掉\s会得到更实用的字符串:
复制代码 代码如下:

Array.prototype.map.toString().replace(/\s/g, '');
// "functionmap(){[nativecode]}"

你可以将它封装成一个可以重用的shim()函数,这样以来你就没有必要去重复所有的类似!

Array.prototype...这样的操作了。这个函数会接受一个对象作为参数(例如,Array.prototype),一个将要添加的属性(例如 'map')和一个要添加的函数。
复制代码 代码如下:

function shim(o, prop, fn) {
var nbody = "function" + prop + "(){[nativecode]}";
if (o.hasOwnProperty(prop) &&
o[prop].toString().replace(/\s/g, '') === nbody) {
//表名是原生的!
return true;
}
//新添加的
o[prop] = fn;
}

测试:
复制代码 代码如下:

//这是原生的方法
shim(
Array.prototype, 'map',
function(){/*...*/}
); // true
//这是新添加的方法
shim(
Array.prototype, 'mapzer',
function(){alert(this)}
);
[1,2,3].mapzer(); // alerts 1,2,3

(完)^_^
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Genshin Impact Présentation de la nouvelle carte en version 4.4 Genshin Impact Présentation de la nouvelle carte en version 4.4 Jan 31, 2024 pm 06:36 PM

Présentation de la nouvelle carte de Genshin Impact version 4.4 Friends, la version Genshin Impact 4.4 a également inauguré le Sea Lantern Festival à Liyue. Dans le même temps, une nouvelle zone de carte sera lancée dans la version 4.4 appelée Shen Yu Valley. Selon les informations fournies, Shen Yugu fait en fait partie du village de Qiaoying, mais les joueurs sont plus habitués à l'appeler Shen Yugu. Maintenant, laissez-moi vous présenter la nouvelle carte. Introduction à la nouvelle carte de Genshin Impact version 4.4. La version 4.4 ouvrira "Chenyu Valley·Shanggu", "Chenyu Valley·Nanling" et "Laixin Mountain" au nord de Liyue. Des points d'ancrage de téléportation ont été ouverts pour les voyageurs dans "Chenyu". Vallée·Shanggu" . ※Après avoir terminé le prologue de Demon God Quest·Act 3 : Le dragon et le chant de la liberté, le point d'ancrage de téléportation sera automatiquement déverrouillé. 2. Qiaoyingzhuang Lorsque la brise chaude du printemps caressa à nouveau les montagnes et les champs de Chenyu, le parfum

Que sont les prototypes et les chaînes de prototypes Que sont les prototypes et les chaînes de prototypes Nov 09, 2023 pm 05:59 PM

Prototype, un objet en js, est utilisé pour définir les propriétés et les méthodes d'autres objets. Chaque constructeur a un attribut prototype est un pointeur pointant vers un objet prototype. Lorsqu'un nouvel objet est créé, le nouvel objet sera Le. L'attribut prototype de son constructeur hérite des propriétés et des méthodes. Chaîne de prototypes, en essayant d'accéder aux propriétés d'un objet, js vérifiera d'abord si l'objet possède cette propriété. Sinon, alors js se tournera vers le prototype de l'objet. Si l'objet prototype n'a pas cette propriété, il le fera. continuez à chercher le prototype du prototype.

Comparaison des performances du langage Go et de Python : lequel est le plus adapté à la programmation haute performance ? Comparaison des performances du langage Go et de Python : lequel est le plus adapté à la programmation haute performance ? Jan 30, 2024 am 08:13 AM

Le langage Go et Python sont deux langages de programmation très populaires, tous deux dotés de leurs propres avantages et caractéristiques. Il existe également quelques différences entre les deux en matière de programmation hautes performances. Cet article comparera le langage Go et Python pour explorer lequel est le plus adapté à la programmation haute performance. Tout d’abord, comprenons le langage Go. Go est un langage de programmation open source développé par Google qui met l'accent sur la simplicité, l'efficacité et la concurrence. L'un des objectifs de conception du langage Go est de fournir une expérience de programmation hautes performances. Il a des coroutines légères (goro

Quelle est la différence entre un prototype et une chaîne de prototypes Quelle est la différence entre un prototype et une chaîne de prototypes Nov 09, 2023 pm 04:48 PM

La différence entre un prototype et une chaîne de prototypes est la suivante : 1. Le prototype est un attribut que possède chaque objet, y compris certains attributs et méthodes partagés, qui est utilisé pour réaliser le partage et l'héritage des attributs et des méthodes entre les objets, tandis que la chaîne de prototypes est un héritage. Le mécanisme est mis en œuvre via la relation prototype entre les objets, qui définit la relation d'héritage entre les objets afin que les objets puissent partager les propriétés et les méthodes de l'objet prototype. 2. La fonction du prototype est de définir les propriétés et méthodes partagées de l'objet, afin que plusieurs objets puissent partager les propriétés et les méthodes du même objet prototype, et que la fonction de la chaîne de prototypes est de réaliser la relation d'héritage entre les objets, etc.

Choisissez le bon langage de programmation : comparez Go et Python pour déterminer le meilleur choix pour les besoins de votre projet Choisissez le bon langage de programmation : comparez Go et Python pour déterminer le meilleur choix pour les besoins de votre projet Jan 30, 2024 am 08:00 AM

À l’ère actuelle de progrès technologiques rapides, le choix du langage de programmation est devenu très critique. Avec le développement continu du domaine du développement logiciel, le langage Go et Python sont devenus deux langages de programmation qui ont beaucoup attiré l'attention. Cet article procédera à une analyse comparative du langage Go et de Python pour aider les lecteurs à choisir le langage de programmation approprié en fonction des besoins du projet. Tout d’abord, comprenons le langage Go. Le langage Go est un langage de programmation compilé statiquement développé par Google. Il dispose de puissantes capacités de traitement simultané et d'un mécanisme de récupération de place efficace, ce qui est très

Cet outil de programmation gratuit national est populaire ! Développé par une équipe de doctorat de l'Université Tsinghua, il présente un délai de réponse court et une grande précision. Cet outil de programmation gratuit national est populaire ! Développé par une équipe de doctorat de l'Université Tsinghua, il présente un délai de réponse court et une grande précision. Jan 31, 2024 pm 05:03 PM

Au cours de l’année écoulée, avec l’application généralisée de la technologie des grands modèles, nous avons pu constater à quel point l’IA a profondément modifié notre façon de travailler. Dans le domaine de la programmation, l’intervention de l’IA apportera également une commodité sans précédent aux programmeurs. Récemment, Feishen Technology a lancé FittenCode, un assistant de code IA basé sur un grand modèle de code auto-développé. Il peut aider les programmeurs à effectuer des tâches de codage plus rapidement, avec précision et avec une meilleure qualité, à améliorer considérablement l'efficacité du codage et à contribuer à la gratuité et à l'ouverture. utilisateurs! L'adresse du site officiel du produit : https://code.fittentech.com/FittenCode est rapidement devenue populaire depuis sa dernière version. L'équipe de développement a travaillé 24 heures sur 24 pour apporter des fonctionnalités,

Quelles sont les fonctions du prototype js et de la chaîne de prototypes Quelles sont les fonctions du prototype js et de la chaîne de prototypes Nov 09, 2023 pm 04:56 PM

La fonction du prototype js et de la chaîne de prototypes est de réaliser l'héritage des objets, d'économiser de l'espace mémoire et d'améliorer les performances et la maintenabilité du code. Introduction détaillée : 1. Implémenter l'héritage d'objets. Le prototype et la chaîne de prototypes vous permettent de créer un objet et d'hériter des propriétés et des méthodes d'un autre objet. Lorsque vous créez un nouvel objet, vous pouvez pointer son prototype vers un autre objet, de sorte que. le nouvel objet L'objet peut accéder aux propriétés et aux méthodes de l'objet prototype ; 2. Économiser de la mémoire et améliorer les performances. En JavaScript, chaque objet a un prototype, les objets peuvent partager des prototypes, etc.

Quelles sont les caractéristiques des prototypes et des chaînes de prototypes ? Quelles sont les caractéristiques des prototypes et des chaînes de prototypes ? Nov 09, 2023 pm 04:38 PM

Les caractéristiques du prototype sont : 1. Le prototype est un objet ordinaire, qui peut avoir des propriétés et des méthodes, comme n'importe quel autre objet. 2. Lorsqu'un objet est créé, un prototype est automatiquement associé ; Lorsque nous créons un nouvel objet, JavaScript attribuera automatiquement un prototype à l'objet et l'associera à l'objet ;3. L'objet peut accéder aux propriétés et aux méthodes du prototype via la chaîne de prototypes. Les caractéristiques de la chaîne de prototypes sont : 1 . Chaque objet a un prototype. Lors de l'accès à une propriété d'un objet, si l'objet lui-même ne possède pas la propriété, il sera recherché dans l'objet prototype et ainsi de suite.

See all articles