javascript当中的代码嗅探扩展原生对象和原型(prototype)_javascript技巧
注:翻译之中有什么不恰当的地方,欢迎大家指正,祝大家双节快乐!
如果不是有特殊需要而去扩展原生对象和原型(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
(完)^_^

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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.

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

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.

À 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

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,

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.

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.
