javascript 오류 지식 점 인 스 턴 스 소결
2884 단어 자바 script잘못 되 기 쉬 운 지식 점
왜 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상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 살 펴 볼 수 있다.,,,,,,,,,,,,,,,,,,,,
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.