`function`에서 Javascript`new`의 이상한 동작 [duplicate]
Oct 15 2020
정말 놀라운 일이 생겼어요. 다음 네 가지 기능을 고려하십시오.
function A() {
this.q = 1;
}
function B() {
this.q = 1;
return this;
}
function C() {
this.q = 1;
return 42;
}
function D() {
this.q = 1;
return {};
}
그리고 new그들 모두로부터 (를 통해 ) 객체를 만들어 봅시다 :
console.log('a', new A());
console.log('b', new B());
console.log('c', new C());
console.log('d', new D());
다음은 출력입니다.
a A { q: 1 }
b B { q: 1 }
c C { q: 1 }
d {}
처음 세 가지는 함수가 반환하는 것이 중요하지 않다는 것을 나타내는 것 같습니다. JS는 각 함수가 수행하는 작업에만 관심 this이 있습니다. 그러나 마지막 것은 그것과 모순됩니다.
그래서 여기서 무슨 일이 일어나고 있습니까? 수정 된 규칙은 "함수가를 반환하면 Object그대로 유지합니다. 그렇지 않으면 유지합니다. this" 그러나 나는 그것에 대해 꽤 확신이 없습니다.
답변
1 Lorand Oct 16 2020 at 02:51
당신이 사용하는 경우 새 연산자는 객체를 생성합니다.
반환 값은 예상대로입니다. 반환에서 객체는 해당 객체를 반환하고 그렇지 않으면 반환이 함수이면 해당 함수를 반환합니다.
function A(){
this.b = 3;
return function(){return 4;};
}
function B(){
this.b = 3;
return { d:4};
}
console.log(typeof (new A())); //function
console.log(typeof (new B())); //object {d:4}
반환에 다른 값이 있거나 존재하지 않는 경우이 연산자는 객체로 반환 된 우선 순위를 갖습니다.
function C(){
this.b = 3;
return "78";
}
console.log(typeof (new C())); // object {b:3}
3 Harkal Oct 16 2020 at 02:40
JavaScript에서 함수를 test()실행하는 것처럼 new없이 함수를 호출 할 때 . 함수가 반환하는 모든 것을 반환합니다.
new와 같이 함수를 호출 new test()하면 return 문이 객체를 반환하고 그렇지 않으면 this객체를 반환 합니다.
그래서
function test() {
this.q = 1
}
test(); // return undefined
new test(); // return {q:1}