운영자 인스턴스 소개
JavaScript에서 변수 유형을 판단하면 연산자 유형을 사용합니다. 연산자 유형을 사용하는 경우 참조 유형을 사용하여 값을 저장하는 데 문제가 있습니다. 어떤 유형의 객체가 참조 되더라도 "객체"를 반환합니다. ECMAScript는이 문제를 해결하기 위해 다른 Java 연산자 인스턴스를 소개합니다. 연산자 인스턴스는 연산자 유형과 유사하며 처리중인 물체의 유형을 식별하는 데 사용됩니다. Typeof 메소드와 달리 인스턴스의 메소드는 개발자가 객체가 특정 유형인지 명시 적으로 확인해야합니다. 예를 들어:
목록 1. 인스턴스 예제
var ostringobject = new String ( "Hello World"); Console.log (OstringObject Instanceof String); // "true"출력
이 코드는 "가변 OstringObject는 String 객체의 인스턴스입니까?"라고 묻습니다. OstringObject는 실제로 문자열 객체의 인스턴스이므로 결과는 "true"입니다. Typeof 메소드만큼 유연하지는 않지만 인스턴스의 메소드가 유형이 "Object"를 반환 할 때 유용합니다.
운영자 인스턴스의 일반 사용 :
일반적으로 인스턴스를 사용하는 것은 인스턴스가 특정 유형에 속하는지 여부를 결정하는 것입니다. 예를 들어:
Listing 2. 인스턴스의 일반적인 사용
// foo가 foo 클래스 함수의 인스턴스인지 결정 foo () {} var foo = new foo (); console.log (foo instancef foo) // true또한, 인스턴스가 상속 관계에서 인스턴스를 사용하여 인스턴스가 부모 유형에 속하는지 여부를 결정할 수 있다는 것입니다. 예를 들어:
상속 관계에서의 인스턴스 사용
// foo가 foo 클래스의 인스턴스인지, 그것이 부모 유형 함수의 인스턴스인지를 결정합니다. console.log (foo instance of foo) // true console.log (foo instance aoo) // true
위의 코드에서 상속 관계 계층의 부모 클래스가 판단됩니다. 다층 상속 관계에서 인스턴스 운영자도 적용 할 수 있습니다.
연산자 인스턴스를 정말로 이해하고 있습니까?
위의 코드 예제를 읽은 후 인스턴스 오퍼레이터가 매우 간단하다고 생각하십니까? 복잡한 사용법을 살펴 보겠습니다.
Listing 4. 복잡한 사용의 인스턴스
console.log (Object Incastof); // true console.log (함수 함수); // true console.log (숫자 인스턴스 번호); // false console.log (string instanceof string); // false console.log (객체의 함수 인스턴스); // true console.log (foo instansof function); // fool foo); // foo);
위의 코드를 읽은 후 다시 혼란 스럽습니까? 다른 사례는 사실이 아닌 반면에 객체와 기능 인스턴스가 왜 동일합니까? 설명하는 방법? 인스턴스의 미스터리를 기본적으로 이해하려면 두 가지 측면에서 시작해야합니다. 1. 언어 사양 에서이 연산자를 정의하는 방법. 2. JavaScript 프로토 타입 상속 메커니즘.
Listing 5. JavaScript 인스턴스 운영자 코드
function instance_of (l, r) {// l 왼쪽 표현식을 나타내고 R은 오른쪽 표현식을 나타냅니다. r l = l .__ proto __의 디스플레이 프로토 타입을 가져옵니다. // L의 암시 적 프로토 타입 (true) {if (l === null) Return false; if (o === l) // 요점은 다음과 같습니다. O가 L과 엄격하게 동일하면 true를 반환하십시오. l = l .__ proto__; }}Listing 6. 객체 인스턴스 객체
// 표현식 편의를 위해 먼저 왼쪽 표현식과 오른쪽 표현식을 구별하십시오. ObjectL = Object, object = Object; // 다음은 점차적으로 o = object.prototype = Object.Prototype l = objectl .__ proto__ = function.prototype // l __proto__ l = function.prototype .__ proto_ = 객체. 프로로 타입 // return true를 찾는 것입니다.
목록 7. 함수 기능 인스턴스
// 표현식 편의를 위해 먼저 왼쪽 표현식과 오른쪽 표현식 함수를 구별합니다. // 다음은 점차적으로 o = functionr.prototype = function.prototype l = functionl .__ proto__ = function.prototype // true를 반환하는 것입니다.
Listing 8. foo의 foo 인스턴스
// 표현식 편의를 위해 먼저 왼쪽 표현식과 오른쪽 표현식을 구별하십시오. 바보 = foo, foor = foo; // 다음은 사양에 따라 점차적으로 추론하는 것입니다. o = foor.proterotype = foo.prototyp l = gel.__ proto__ = fortoptype // 첫 번째 판단은 O! = l // 첫 번째 판단은 o! = l //주기가 여전히 __proto__ l = function.prototype를 가지고 있는지 여부를 찾는 것입니다. 여전히 __proto__ l = object.prototype .__ proto__ = null // 세 번째 판단 l == null // return false가 있습니다.
Dojo 상속 메커니즘에서 인스턴스의 적용을 간단히 분석합니다.
JavaScript에서는 Java와 마찬가지로 다중 상속의 개념이 없습니다. 그러나 Dojo의 클래스를 선언 할 때 여러 클래스의 상속이 허용됩니다. Dojo 1.6.1을 예로 들어 봅시다.
목록 9. 도조의 다중 상속
dojo.declare ( "aoo", null, {}); dojo.declare ( "boo", null, {}); dojo.declare ( "foo", [aoo, boo], {}); var foo = new foo (); console.log (foo instance); // true console.log (foo instance of boo); // false console.log (ao.isinstanceof (aoo)); // true console.log (boo)); // true console.log (foo.isinstanceof (boo)); // true위의 예에서 Foo는 AOO와 BOO 모두에서 상속하지만, 연산자 인스턴스를 사용하여 FOO가 부의 인스턴스인지 확인하면 False가 반환됩니다. 실제로, Dojo 내부에서 Foo는 여전히 AOO에서만 물려 받고 Mixin 메커니즘을 사용하여 Boo 클래스의 방법과 속성을 FOO로 복사합니다. 따라서 연산자 인스턴스가 Boo 인스턴스인지 확인하는 데 사용되면 False가 반환됩니다. 따라서 Dojo는 각 클래스 인스턴스에 대해 isinstanceof라는 새로운 메소드를 추가 하고이 방법을 사용하여 여러 상속을 확인합니다.