javascript 오류 지식 점 인 스 턴 스 소결

본 고의 실례 는 자 바스 크 립 트 의 틀 리 기 쉬 운 지식 점 을 총 결 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
왜 type:of null=='object'
원 리 는 이 렇 습 니 다.서로 다른 대상 은 바 텀 에서 바 이 너 리 로 표시 되 고 자 바스 크 립 트 에서 바 이 너 리 3 위 가 0 이면 object 유형 으로 판 단 됩 니 다.null 의 바 이 너 리 는 전체 0 이 고 자 연 스 럽 게 세 자리 도 0 이기 때문에 type of 를 실행 할 때'object'로 돌아 갑 니 다.
대상 속성의 존재 성
예 를 들 어 my Object.a 의 속성 접근 반환 값 은 undefined 일 수 있 지만 이 값 은 속성 에 저 장 된 undefined 일 수도 있 고 속성 이 존재 하지 않 기 때문에 undefined 로 돌아 갈 수도 있 습 니 다.그렇다면 이 두 가지 상황 을 어떻게 구분 할 것 인가?

var myObject = {
  a:2
};

//    
("a" in myObject); // true
("b" in myObject); // false

//    
myObject.hasOwnProperty( "a" ); // true
myObject.hasOwnProperty( "b" ); // false

//    
Object.prototype.hasOwnProperty.call(myObject, 'b')

대상 상속 의 세 가지 방법
다음 코드 참조:

		function Foo(name) {
			this.name = name;
		}

		Foo.prototype.myName = function() {
			console.log(this.name)
		}

		function Bar(name, label) {
			Foo.call(this, name);
			this.label = label;
		}
        
        //   1
		Bar.prototype = Object.create(Foo.prototype)
        
        //   2
		Bar.prototype = Foo.prototype;

        //   3
        Bar.prototype = new Foo();

		//Bar.prototype.constructor = Bar;

		Bar.prototype.sayName = function() {
			console.log(this.name)
		}

		
		var b = new Foo('fayin')
	
		b.sayName()

상례 에서 세 가지 방법 은 모두 Bar 가 foo.prototype 의 방법 을 계승 할 수 있 지만 그들 사이 에는 미묘 한 차이 가 있다.
Object.create(..)는'새'대상 을 만 들 고 새 대상 내부 의[Prototype]을 지정 한 대상 과 연결 합 니 다(이 예 는 Foo.prototype).
Bar.prototype=Foo.prototype 은 Bar.prototype 과 연 결 된 새로운 대상 을 만 들 지 않 습 니 다.Bar.prototype 이 foo.prototype 대상 을 직접 참조 하도록 할 뿐 입 니 다.따라서 Bar.prototype.my Label=..과 같은 할당 문 구 를 실행 할 때 Foo.prototype 대상 자 체 를 직접 수정 합 니 다.
Bar.prototype=new Foo()는 Bar.prototype 과 연 결 된 새로운 대상 을 만 들 것 입 니 다.그러나 이 는 Foo(..)의'구조 함수 호출'을 사 용 했 습 니 다.만약 에 함수 Foo 가 부작용(예 를 들 어 로그 작성,상태 수정,다른 대상 에 등록,this 에 데이터 속성 추가 등)이 있 으 면 Bar()의'후대'에 영향 을 주 고 그 결 과 는 상상 할 수 없습니다.
결론.
따라서 적절 한 관련 대상 을 만 들 려 면 부작용 이 있 는 Foo(...)대신 Object.create(...)를 사용 해 야 합 니 다.이렇게 하 는 유일한 단점 은 새로운 대상 을 만 들 고 낡은 대상 을 버 려 야 하 며 기 존의 기본 대상 을 직접 수정 할 수 없다 는 것 이다.
관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 살 펴 볼 수 있다.,,,,,,,,,,,,,,,,,,,,
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기