JavaScript는 많은 언어의 특성을 기반으로합니다. 예를 들어, Syntax Java, 함수는 체계에 그리기, 프로토 타입 상속은 자아에서 추첨되며 Perl에서 정규 표현식을 그립니다. (DC JavaScript : 언어 에센스).
첫째, 각 JS는 프로토 타입 상속을 기반으로 한 객체 지향 언어입니다. 내부 배열은 객체이고 함수는 객체이며 물론 "객체"는 여전히 객체입니다. 또한, 각 객체에는 내부 슬롯 [[프로토 타입]]이 있으며, 이는 프로토 타입 체인을 연결하는 열쇠입니다. 분명히, 우리는 객체에 대한 프로토 타입 속성을 설정할 수 있지만 무엇입니까? 이것은 단지 징후 일뿐입니다. 그 뒤에 숨겨진 살인 의도가 있습니다.
좋아, 그런 다음 isprototypof ()를 사용하여 객체가 다른 객체의 프로토 타입인지 확인할 수 있습니다. 그러나 이것은 또한 [[[프로토 타입]] 체인을 기반으로합니다.
예를 들어:
// 함수 함수 만들기 foo () {} // 함수의 프로토 타입 속성 수정 foo.prototype = {이름 : "foo.prototype"}; // 인스턴스 생성 var a = new foo (); // a의 기본 프로토 타입을 다시 작성하여 foo.prototype이어야합니다. a.prototype = {이름 : "a.prototype"};다음 질문은 foo.prototype이 A의 프로토 타입인지 여부입니다. !
이것은 개별적으로 볼 필요가있다 : 한편으로는 A.prototype는 실제로 {name : "a.prototype"}; 그러나 foo.prototype.isprototypof (a) 결과는 사실입니다.
특정 관계를 살펴 보겠습니다. (사용 --->를 의미합니다.
함수 ---> function.prototype ---> Object.Prototype
function.prototype <--- foo ---- foo.prototype ------> object.prototype.
또한, 숫자, 부울, 문자열 등의 [[protptype]]는 여전히 함수입니다. prototype 객체입니다. function.prototype 객체는 "function"이며 내부에 [[construct]]를 포함하지 않으므로 생성자로 사용할 수 없습니다. 실제로, function.prototype는 비슷합니다 : function () {}. [[프로토 타입]] 내부 슬롯 외에도 "기능"유형에는 프로토 타입 속성도 있습니다. 각 함수에는 항상 프로토 타입 객체가 있습니다. this.prototype = {생성자 : this} (일반 객체) 이 정상 객체의 [[프로토 타입]]은 객체에 연결됩니다.
인스턴스 객체의 [[프로토 타입]]은 생성자가 생성 한 객체. 프로로 타입입니까?
이 인스턴스의 [[프로토 타입]]은 생성자의 프로토 타입 속성에 의해 초기화됩니다. 함수의 [[프로토 타입]]이 아닙니다. 따라서 객체 함수로 구성된 객체라면 실제로입니다.
객체는 기능이며, 프로토 타입은 유명한 객체입니다. 프로로 타입 (약간 말도 안되는 소리)이지만 [[프로토 타입]]가 함수를 가리 킵니다. 아래를 참조하십시오 :
Object -----> function.prototype ------> Object.Prototype.
이 [[프로토 타입]] 체인을 변경하는 방법?
var a = object.create (obj) 또는 object.setPrototypof (obja, objb)의 형태 일 수 있습니다. 관계가 매우 간단하기 때문에 예를 제시 할 필요가 없다고 생각합니다. 끔찍한 예제 만 제공합시다. 의미가 없습니다.
마지막 질문은 [[[프로토 타입]] 체인을 기반으로 한 행동 대표단입니까?
예, 그게 그렇습니다.