프로토타입 이해하기
프로토타입은 다른 객체가 속성 상속을 구현할 수 있는 객체입니다. 모든 객체는 상속이 될 수 있으며 모든 객체에는 기본적으로 프로토타입이 있습니다. 프로토타입 자체도 객체이기 때문에 각 프로토타입 자체에는 프로토타입이 있습니다. 모든 객체에는 __proto__로 기록되는 프로토타입 속성이 있습니다. 객체를 정의할 때마다 해당 객체의 __proto__ 속성은 객체의 프로토타입을 가리킵니다. 예는 다음과 같습니다.
var foo = { x: 10, y: 20 };
이 속성은 프로토타입을 지정하지 않아도 예약됩니다. 명확한 포인터가 있으면 연결된 목록이 연결됩니다. 프로토타입 자체에도 가장 진보된 object.prototype인 포인터가 있다는 점에 유의해야 합니다. 예시는 다음과 같습니다.
var a = { x: 10, calculate: function (z) { return this.x + this.y + z } }; var b = { y: 20, __proto__: a }; var c = { y: 30, __proto__: a }; // call the inherited method b.calculate(30); // 60
프로토타입 사용
프로토타입의 원리를 이해한 후, 프로토타입을 어떻게 사용하나요? 즉, 프로토타입의 역할은 무엇인가?
일반 초보자는 기본 JavaScript 구문을 익힌 후 함수 지향 프로그래밍을 사용하세요. 다음 코드:
var decimalDigits = 2, tax = 5; function add(x, y) { return x + y; } function subtract(x, y) { return x - y; } //alert(add(1, 3));
는 각 함수를 실행하여 최종 결과를 얻습니다. 하지만 프로토타입을 사용하면 생성자 를 사용하여 일부 코드를 최적화할 수 있습니다.
먼저 변수만 함수 본문에 저장됩니다.
var Calculator = function (decimalDigits, tax) { this.decimalDigits = decimalDigits; this.tax = tax; };
구체적인 방법은 다음과 같습니다. 설정할 프로토타입 속성:
Calculator.prototype = { add: function (x, y) { return x + y; }, subtract: function (x, y) { return x - y; } }; //alert((new Calculator()).add(1, 3));
이런 방식으로 객체를 인스턴스화하여 해당 기능 작업을 수행할 수 있습니다. 이는 일반적인 js 프레임워크에서도 사용되는 방법입니다.
프로토타입의 또 다른 기능은 상속을 구현하는 것입니다. 먼저 상위 개체를 정의합니다:
var BaseCalculator = function() { this.decimalDigits = 2; }; BaseCalculator.prototype = { add: function(x, y) { return x + y; }, subtract: function(x, y) { return x - y; } };
그런 다음 하위 개체를 정의하고 하위 개체의 프로토타입이 상위 요소의 인스턴스화를 가리킵니다.
var Calculator = function () { //为每个实例都声明一个税收数字 this.tax = 5; }; Calculator.prototype = new BaseCalculator();
계산기의 프로토타입을 볼 수 있습니다. BaseCalculator를 가리키는 것입니다. 인스턴스에서 목적은 Calculator가 add(x,y)와 subtract(x,y)의 두 함수를 통합하도록 하는 것입니다. 또 다른 요점은 해당 프로토타입이 BaseCalculator의 인스턴스이기 때문에 무엇을 생성하든 여러 개의 Calculator 개체 인스턴스가 있으며 해당 프로토타입은 모두 동일한 인스턴스를 가리킵니다.
위 코드를 실행한 후 Calculator의 프로토타입이 BaseCalculator의 인스턴스를 가리키기 때문에 해당decimalDigits 속성 값에 액세스할 수 있음을 알 수 있습니다. 그런 다음 Calculator가 BaseCalculator의 생성자에 액세스하는 것을 원하지 않으면 선언된 속성값, 어떻게 해야 하나요? 인스턴스 대신 BaseCalculator의 프로토타입을 Calculator에 지정하면 됩니다. 코드는 다음과 같습니다.
var Calculator = function () { this.tax= 5; }; Calculator.prototype = BaseCalculator.prototype;
타사 라이브러리를 사용할 때 그들이 정의한 프로토타입 메서드가 우리의 요구 사항을 충족하지 못하는 경우가 있으므로 몇 가지 메서드를 직접 추가할 수 있습니다.
//覆盖前面Calculator的add() function Calculator.prototype.add = function (x, y) { return x + y + this.tax; }; var calc = new Calculator(); alert(calc.add(1, 1));
프로토타입 체인
객체의 프로토타입은 객체의 부모를 가리키고, 부모의 프로토타입은 부모의 부모를 가리킵니다. 이 프로토타입 수준 관계를 프로토타입 체인이라고 합니다.
객체의 속성을 찾을 때 JavaScript는 지정된 이름의 속성을 찾을 때까지 프로토타입 체인을 위쪽으로 순회합니다. 검색이 프로토타입 체인의 맨 위인 Object.prototype에 도달하면 지정된 속성을 아직 찾을 수 없으면 정의되지 않은 상태가 반환됩니다.
예제는 다음과 같습니다.
function foo() { this.add = function (x, y) { return x + y; } } foo.prototype.add = function (x, y) { return x + y + 10; } Object.prototype.subtract = function (x, y) { return x - y; } var f = new foo(); alert(f.add(1, 2)); //结果是3,而不是13 alert(f.subtract(1, 2)); //结果是-1
subtrace는 위쪽을 바라보는 원리를 따르는 반면 add는 사고가 발생하는 것을 확인할 수 있습니다. 그 이유는 속성을 검색할 때 해당 속성이 없으면 먼저 프로토타입 을 검색하기 때문입니다.
Object.prototype에 관해 말하자면, hasOwnProperty라는 메소드 중 하나를 언급해야 합니다. 객체에 프로토타입 체인의 속성이 아닌 사용자 정의 속성이 포함되어 있는지 확인할 수 있습니다. 이는 속성을 처리하지만 프로토타입 체인을 조회하지 않는 JavaScript의 유일한 함수입니다. 사용 코드는 다음과 같습니다.
// 修改Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.hasOwnProperty('goo'); // true
프로토타입 객체와 인스턴스 간의 관계를 확인하려면 isPrototyleOf 메서드를 도입해야 합니다. 데모는 다음과 같습니다.
alert(Cat.prototype.isPrototypeOf(cat2)); //true
위 내용은 JavaScript 프로토타입에 대한 심층적인 이해(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

Dreamweaver Mac版
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
