찾다
웹 프론트엔드JS 튜토리얼javascript의 코드 스니핑은 기본 객체와 프로토타입을 확장합니다.javascript 팁

참고: 번역에 부적절한 내용이 있으면 정정해 주세요. 모두 즐거운 연휴 보내세요!
특별한 필요 없이 네이티브 객체와 프로토타입을 확장하는 것은 좋지 않습니다

코드 복사 코드는 다음과 같습니다.

//하지 마세요
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() {
// 일부 코드
};
}

(이렇게 하면 다른 개발자의 지도 정의가 손상되고 해당 기능 구현에 영향을 주지만)
하지만 적대적이고 경쟁적인 환경에서는(즉, js 라이브러리를 제공하거나 사용할 때) 누구도 신뢰해서는 안 됩니다. 다른 사람의 js 코드가 자신의 코드보다 먼저 로드되고 ES5와 완전히 호환되지 않는 map() 메서드를 정의하여 코드가 제대로 실행되지 않는 경우 어떻게 해야 합니까?

그러나 Webkit 커널이 map() 메소드를 구현한다면 이 메소드는 확실히 정상적으로 실행될 것이므로 안심하셔도 됩니다. 그렇지 않으면 코드를 사용하여 이를 감지해야 합니다.

다행히 이는 JavaScript에서 구현하기 쉽습니다. 네이티브 함수의 toString 메서드를 호출하면 함수의 문자열이 반환됩니다.
예를 들어 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) {
//테이블 이름은 네이티브입니다!
true 반환
}
//새로 추가됨
o[prop] = fn
}

테스트:

코드 복사 코드는 다음과 같습니다.

//이것이 네이티브 메소드입니다
shim(
Array.prototype, 'map',
function(){/*...*/}
) / / true
//새로 추가된 메소드입니다
shim(
Array.prototype, 'mapzer',
function(){alert(this)}
); 1,2,3].mapzer(); // 경고 1,2,3

(끝)^_^
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
原神4.4版本新地图介绍原神4.4版本新地图介绍Jan 31, 2024 pm 06:36 PM

原神4.4版本新地图介绍,小伙伴们原神这次4.4版本也是迎来了璃月的海灯节,同时将在4.4版本推出一个新的地图区域,名为沉玉谷。根据提供的信息,沉玉谷实际上是翘英庄的一部分,但玩家更习惯称其为沉玉谷。下面就让小编来给大家介绍一下新地图吧。原神4.4版本新地图介绍4.4版本将开放璃月北部的「沉玉谷·上谷」、「沉玉谷·南陵」和「来歆山」,在「沉玉谷·上谷」已为旅行者开启传送锚点。※完成魔神任务序章·第三幕巨龙与自由之歌」后,将自动解锁该传送锚点。二、翘英庄当春日温煦的柔风再度抚过沉玉的山野,那馥郁的

什么是原型和原型链什么是原型和原型链Nov 09, 2023 pm 05:59 PM

原型,js中的一个对象,用于定义其他对象的属性和方法,每个构造函数都有一个prototype属性,这个属性是一个指针,指向一个原型对象,当创建新对象时,这个新对象会从其构造函数的prototype属性继承属性和方法。原型链,当试图访问一个对象的属性时,js会首先检查这个对象是否有这个属性,如果没有,那么js会转向这个对象的原型,如果原型对象也没有这个属性,会继续查找原型的原型。

Go语言与Python的性能比较:哪个更适合高性能编程?Go语言与Python的性能比较:哪个更适合高性能编程?Jan 30, 2024 am 08:13 AM

Go语言和Python是两种非常流行的编程语言,都具有各自的优势和特点。在高性能编程方面,两者也有一些不同之处。本文将对Go语言和Python进行比较,以探讨哪个更适用于高性能编程。首先,让我们来了解一下Go语言。Go语言是由谷歌公司开发的一种开源编程语言,它专注于简洁、高效和并发性。Go语言的设计目标之一是提供高性能的编程体验。它具备轻量级的协程(goro

原型和原型链有什么区别原型和原型链有什么区别Nov 09, 2023 pm 04:48 PM

原型和原型链的区别是:1、原型是每个对象都具有的属性,包含了一些共享的属性和方法,用于实现对象之间的属性和方法的共享和继承,而原型链是一种通过对象之间的原型关系来实现继承的机制,定义了对象之间的继承关系,使得对象可以共享原型对象的属性和方法;2、原型的作用是定义对象的共享属性和方法,使得多个对象可以共享同一个原型对象的属性和方法,而原型链的作用是实现对象之间的继承关系等等。

选择合适的编程语言:比较Go语言和Python,确定适用于项目需求的最佳选择选择合适的编程语言:比较Go语言和Python,确定适用于项目需求的最佳选择Jan 30, 2024 am 08:00 AM

在当今科技进步迅猛的时代,编程语言的选择变得非常关键。随着软件开发领域的不断发展,Go语言和Python成为了两个备受关注的编程语言。本文将对Go语言和Python进行对比分析,以帮助读者根据项目需求选择合适的编程语言。首先,让我们来了解一下Go语言。Go语言是由Google公司开发的一种静态编译型编程语言。它具有强大的并发处理能力和高效的垃圾回收机制,非常

这款国产免费编程工具火了!清华博士团队开发,响应延迟短、准确率高这款国产免费编程工具火了!清华博士团队开发,响应延迟短、准确率高Jan 31, 2024 pm 05:03 PM

在过去一年中,随着大模型技术的广泛应用,我们已经见证了AI如何深刻地改变着我们的工作方式。在程序编写领域,AI的介入同样将为程序员们带来前所未有的便利。近日,非十科技推出了一款基于自研代码大模型打造的AI代码助手——FittenCode,它可以帮助程序员更迅捷、更准确、更高质量地完成编码任务,大幅提升编码效率,并且向用户免费开放使用!产品官网地址:https://code.fittentech.com/FittenCode自上次发布以来迅速走红。开发团队日以继夜地工作,带来了功能、

js原型和原型链有什么作用js原型和原型链有什么作用Nov 09, 2023 pm 04:56 PM

js原型和原型链的作用是实现对象的继承,节省内存空间,并提高代码的性能和可维护性。详细介绍:1、实现对象的继承,原型和原型链允许创建一个对象,并使其继承另一个对象的属性和方法,当创建一个新的对象时,可以将其原型指向另一个对象,这样新对象就可以访问到原型对象上的属性和方法;2、节省内存和提高性能,在JavaScript中,每个对象都有一个原型,通过原型链,对象可以共享原型上等等。

原型和原型链有什么特点原型和原型链有什么特点Nov 09, 2023 pm 04:38 PM

原型的特点是:1、原型是一个普通的对象,它可以拥有属性和方法,就像任何其他对象一样;2、在创建对象时,会自动关联一个原型。当我们创建一个新对象时,JavaScript将自动为该对象分配一个原型,并将其与对象相关联;3、对象可以通过原型链访问原型的属性和方法;原型链的特点是:1、每个对象都有一个原型,当访问一个对象的属性时,如果该对象本身没有该属性,则会在原型对象中查找等等。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기