객체 병합 기능 구현 방법
Foreword
$.extend()는 자주 사용되는 도구 함수로, 주로 매개변수(객체)를 병합하는 데 사용됩니다. 구체적인 사용법은 여기에서 자세히 설명하지 않습니다. 병합 과정에서 전체 복사 사용 여부를 제어할 수 있습니다. ES2015의 새로운 Object.sign() 메소드도 객체 병합을 실현할 수 있지만 병합 프로세스에서는 얕은 복사본이 사용됩니다. 이 기사에서는 객체 자체를 병합하는 jQuery의 확장 메소드 소스 코드를 참조합니다. 즉, 여러 객체의 속성을 대상 객체에 복사합니다. 동일한 속성을 가지고 있으면 나중 객체가 이전 객체를 덮어씁니다.
얕은 복사를 통한 객체 병합 달성
이전 블로그 게시물에서는 객체와 배열의 깊은 복사와 얕은 복사에 대해 구체적으로 소개했습니다. 먼저 구현을 살펴보고 설명하겠습니다
function extend() { //extend 浅拷贝实现 var name,options,copy, length = arguments.length, i = 1, target = arguments[0] || {}; //取目标对象 if(['object','function'].indexOf(typeof target) < 0){ target = {}; } for(;i<length;i++){ options = arguments[i] if(options != null){ //排除空参数的情况 extend({},,) for(name in options){ //遍历对象 赋值 copy = options[name]; if (copy !== undefined) { target[name] = copy; } } } } return target } //测试数据 var test1 = { a : 1, b : { c : 2, d : 3 }, e : [1,'a'] }, test2 = { b : { c : 4, d : 5, f : 6 }, e : [1,'a'], g : 7 } var test = extend({},test1,test2); console.log(test.b.d); //5 test2.b.d = 'x'; //修改test2 console.log(test.b.d); // 'x' test随之修改
아이디어는 다음과 같습니다.
1. 기본적으로 첫 번째 매개변수가 객체 데이터 유형이 아닌 경우에는 첫 번째 매개변수가 대상 개체로 사용됩니다. 값은 빈 개체에 할당됩니다
2. 나머지 Parameter(소스 개체)를 탐색하여 원본 개체의 속성을 대상 개체에 복사합니다.
3. 대상 개체를 병합 결과로 반환
두 번째 단계에서는 원본 개체의 속성 값을 판단하지 않으며 모든 할당은 '='를 사용하여 이루어지므로 원본 개체의 속성 값이 object 속성, copy 그냥 참조값일 뿐이고, 얕은 복사 방식이다. 테스트 결과를 보면 test 와 test2 의 b 속성 값이 같은 객체를 사용하고 서로 영향을 끼치는 것을 알 수 있다. . 이를 알고 나면 병합 중에 전체 복사를 구현하는 방법에 대한 아이디어가 있어야 합니다.
딥 카피를 통한 객체 병합 달성
원본 객체 속성 값을 복사할 때 해당 값의 유형을 결정해야 합니다. 객체 데이터 유형인 경우 확장 함수를 재귀적으로 호출합니다. 그러면 객체 병합의 deep copy 방법을 연습할 수 있으며 구현은 다음과 같습니다:
function extend() { //extend 深拷贝实现 var name,options,src,copy, deep = false, //是否深拷贝 默认为false length = arguments.length, i = 1, target = arguments[0] || {}; //如果第一个参数为boolean类型,赋值给deep if(typeof target == 'boolean'){ deep = arguments[0]; target = arguments[i] || {}; //目标对象顺延 i++; } //如果target不是对象数据类型的话 target赋值为 {} if(['object','function'].indexOf(typeof target) < 0){ target = {}; } for(;i<length;i++){ options = arguments[i]; if(options != null){ for(name in options){ copy = options[name]; src = target[name]; if(target === copy){ //避免重复循环 continue; } if(deep && copy && (typeof copy == 'object')){ // 类型判断 src = Object.prototype.toString.call(copy) == '[object Array]' ? [] : {}; //区分数组和‘对象’ target[name] = extend(deep,src,copy); }else { if (copy !== undefined) { target[name] = copy; } } } } } return target }
1. 매개변수 판단, 첫 번째 매개변수가 Boolean 유형인 경우 여부를 제어하는 매개변수 deep으로 간주됩니다. deep copy, deep은 동시에 false로 설정됩니다. 대상 요소는 두 번째 매개변수
2입니다. 속성 값을 복사할 때 deep이 true이고 속성인 경우 deep 매개 변수의 유형과 속성 값을 결정해야 합니다. 값이 객체형이면 확장 함수를 재귀적으로 호출하고, 아니면 직접 값을 할당하세요
3. 대상 객체의 속성에 서로 다른 초기값을 할당하려면 배열과 '객체'를 구분해야 합니다. 모두 {}이면 대상 요소에 복사된 배열 유형의 속성 값은 {'0':xx, '1':xx...}
Conclusion
항상 $.extend를 직접 사용하세요() , 사용하기는 쉽지만 구현에 대해 명확하지 않습니다. I*는 구현이 엄격하지 않을 수 있지만 이득은 꽤 좋다고 생각합니다.
위 내용은 객체 병합 기능 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Doubao 앱에는 많은 AI 생성 기능이 있을 예정인데 Doubao 앱에는 어떤 기능이 있나요? 사용자는 이 소프트웨어를 사용하여 그림을 만들고, AI와 채팅하고, 사용자를 위한 기사를 생성하고, 모든 사람이 노래를 검색하도록 도울 수 있습니다. Doubao 앱의 이 기능 소개는 구체적인 작동 방법을 알려드릴 수 있습니다. 구체적인 내용은 아래와 같으니 한번 살펴보세요! Doubao 앱에는 어떤 기능이 있나요? 답변: 그림 그리기, 채팅, 기사 쓰기, 노래 찾기 등이 가능합니다. 기능 소개: 1. 질문 쿼리: AI를 사용하여 질문에 대한 답변을 더 빠르게 찾을 수 있으며, 모든 종류의 질문을 할 수 있습니다. 2. 이미지 생성: AI를 사용하면 모든 사람에게 일반적인 요구 사항만 알려주면 됩니다. 3. AI 채팅: 사용자와 채팅할 수 있는 AI를 생성할 수 있으며,

vivox100s와 x100 휴대폰은 모두 in vivo 휴대폰 제품군의 대표적인 모델입니다. 두 휴대폰은 각각 서로 다른 시대의 vivo 첨단 기술 수준을 대표하므로 디자인, 성능, 기능 면에서 일정한 차이가 있습니다. 이번 글에서는 소비자들이 자신에게 꼭 맞는 휴대폰을 선택할 수 있도록 두 휴대폰을 성능비교와 기능분석 측면에서 자세히 비교해보겠습니다. 먼저 vivox100s와 x100의 성능 비교를 살펴보겠습니다. vivox100s에는 최신 기술이 탑재되어 있습니다.

JPA와 MyBatis: 기능과 성능의 비교 분석 소개: Java 개발에서 지속성 프레임워크는 매우 중요한 역할을 합니다. 일반적인 지속성 프레임워크에는 JPA(JavaPersistenceAPI) 및 MyBatis가 포함됩니다. 이 기사에서는 두 프레임워크의 기능과 성능을 비교 분석하고 구체적인 코드 예제를 제공합니다. 1. 기능 비교: JPA: JPA는 JavaEE의 일부이며 객체 지향 데이터 지속성 솔루션을 제공합니다. 주석 또는 X가 전달되었습니다.

인터넷의 급속한 발전으로 셀프미디어라는 개념은 사람들의 마음속에 깊이 뿌리내렸습니다. 그렇다면 셀프미디어란 정확히 무엇인가? 주요 특징과 기능은 무엇입니까? 다음에는 이러한 문제를 하나씩 살펴보겠습니다. 1. 셀프미디어란 정확히 무엇인가? We-media는 이름에서 알 수 있듯이 당신이 미디어라는 뜻입니다. 개인이나 팀이 인터넷 플랫폼을 통해 콘텐츠를 독립적으로 생성, 편집, 출판 및 전파할 수 있는 정보 매체를 말합니다. 신문, 텔레비전, 라디오 등과 같은 전통적인 미디어와 달리 셀프 미디어는 더욱 상호작용적이고 개인화되어 있어 모든 사람이 정보의 생산자이자 전파자가 될 수 있습니다. 2. 셀프미디어의 주요 특징과 기능은 무엇입니까? 1. 낮은 문턱: 셀프미디어의 등장으로 미디어 산업에 진출하기 위한 문턱이 낮아졌습니다. 더 이상 번거로운 장비와 전문팀이 필요하지 않습니다.

Xiaohongshu가 젊은이들 사이에서 인기를 끌면서 점점 더 많은 사람들이 이 플랫폼을 사용하여 자신의 경험과 인생 통찰력의 다양한 측면을 공유하기 시작했습니다. 여러 Xiaohongshu 계정을 효과적으로 관리하는 방법이 중요한 문제가 되었습니다. 이 글에서는 Xiaohongshu 계정 관리 소프트웨어의 일부 기능에 대해 논의하고 Xiaohongshu 계정을 더 잘 관리하는 방법을 살펴보겠습니다. 소셜 미디어가 성장함에 따라 많은 사람들이 여러 소셜 계정을 관리해야 한다는 사실을 깨닫게 되었습니다. 이는 Xiaohongshu 사용자에게도 어려운 과제입니다. 일부 Xiaohongshu 계정 관리 소프트웨어는 자동 콘텐츠 게시, 예약 게시, 데이터 분석 및 기타 기능을 포함하여 사용자가 여러 계정을 보다 쉽게 관리할 수 있도록 도와줍니다. 이러한 도구를 통해 사용자는 자신의 계정을 보다 효율적으로 관리하고 계정 노출과 관심을 높일 수 있습니다. 또한 Xiaohongshu 계정 관리 소프트웨어에는

PHP 팁: 이전 페이지로 돌아가는 기능을 빠르게 구현하세요. 웹 개발을 하다 보면 이전 페이지로 돌아가는 기능을 구현해야 하는 경우가 종종 있습니다. 이러한 작업은 사용자 경험을 향상시키고 사용자가 웹 페이지 간을 더 쉽게 탐색할 수 있게 해줍니다. PHP에서는 몇 가지 간단한 코드를 통해 이 기능을 구현할 수 있습니다. 이번 글에서는 이전 페이지로 돌아가는 기능을 빠르게 구현하는 방법을 소개하고 구체적인 PHP 코드 예제를 제공하겠습니다. PHP에서는 $_SERVER['HTTP_REFERER']를 사용하여 이전 페이지의 URL을 가져올 수 있습니다.

"Discovering Discuz: 정의, 기능 및 코드 예제" 인터넷의 급속한 발전과 함께 커뮤니티 포럼은 사람들이 정보를 얻고 의견을 교환하는 중요한 플랫폼이 되었습니다. 많은 커뮤니티 포럼 시스템 중에서 중국의 잘 알려진 오픈 소스 포럼 소프트웨어인 Discuz는 대다수의 웹 사이트 개발자 및 관리자가 선호합니다. 그렇다면 Discuz는 무엇입니까? 어떤 기능이 있으며 웹사이트에 어떻게 도움이 됩니까? 이 기사에서는 Discuz를 자세히 소개하고 독자가 이에 대해 더 자세히 알아볼 수 있도록 구체적인 코드 예제를 첨부합니다.

Linux에서 GDM의 기능 및 기능에 대한 자세한 설명 Linux 운영 체제에서 GDM(GNOMEDisplayManager)은 사용자가 시스템에 로그인 및 로그아웃할 수 있는 인터페이스를 제공하는 그래픽 로그인 관리자입니다. GDM은 일반적으로 GNOME 데스크탑 환경의 일부이지만 다른 데스크탑 환경에서도 사용할 수 있습니다. GDM의 역할은 로그인 인터페이스를 제공하는 것뿐만 아니라 사용자 세션 관리, 화면 보호기, 자동 로그인 및 기타 기능도 포함합니다. GDM의 기능은 주로 다음과 같은 측면을 포함합니다:
