>  기사  >  웹 프론트엔드  >  자바스크립트 면접 질문 에세이_자바스크립트 기술

자바스크립트 면접 질문 에세이_자바스크립트 기술

WBOY
WBOY원래의
2016-05-16 18:08:521455검색
코드 복사 코드는 다음과 같습니다.

var Fundamental = {count:1}; function Test( ){}
Test.prototype = Fundamental;
Test.prototype.increase = function(){this.count ;}
var test = new Test(); log(test .count);
var test2 = new Test();
console.log(test2.count)
test.increase()//테스트 값 .count 와 test2.count 는 각각 얼마인가요?


어제 면접때 봤던 질문이 아마 test.increase 를 호출했을 때 나온 질문인데, count 값이 어떻게 되나요? ​​of test 및 test2 각각
먼저 이렇게 대답하세요. 질문으로 인해 이 상황이 다른 유사한 상황과 혼동될 수 있습니다.
코드가 다음과 같이 변경되었다고 가정해 보겠습니다.



코드 복사 코드는 다음과 같습니다. function FundamentalModified(){
var count = 1
this.increase = function(){
count ;
}
this.show = function(){
return count;
}
}
function TestModified(){}
TestModified.prototype = new FundamentalModified();
var test3 = new TestModified();
var test4 = new TestModified();
test3.increase()
//test3.show()는 무엇인가요? .show() 각각


질문을 이렇게 바꾸면 훨씬 간단해집니다. 그러나 두 질문은 동일한 결과를 얻지 못합니다.
========================================= 나눠서
다시 면접 질문으로 돌아가서, 면접 질문의 답은 실제로 2와 1입니다. 이유: test.count는 test의 속성이고 test2.count는 실제로 test2.__proto__의 속성입니다.
test.increase()가 호출되면 JS는 this.count ==>를 반환합니다. this.count = this.count 1;

this.count

=
this.count

1;

간단해 보이는 이 문장은 사실 남다른 의미를 갖고 있습니다~~ 이 문장의 실제 의미는 인스턴스에 대한 새 속성을 생성한다는 것이며, 이 속성에는

this.count

1의 값이 할당됩니다.

그리고 this.count는 실제로 프로토타입 체인의 개수입니다. 즉, this.count는
가 처음으로

을 실행할 때 실제로 다음과 같이 동작합니다.

this.count = Test.Prototype.count 1; hasOwnProperty를 사용하여 확인할 수 있습니다.

var test = new Test()인 경우. test.hasOwnProperty("count") === false

test.increase() 이후. test.hasOwnProperty("count") === true

일반적으로 JS는 여전히 매우 재미있는 언어입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.