이 문제는 실제로 jQuery 소스 코드를 분석할 때 var ret = jQuery.merge(this.constructor(), elems );
가 사용되는 것을 보았는데, this.constructor()는 init 메소드에 의해 생성된 빈 인스턴스 객체를 반환합니다. 그래서 그 방향이 헷갈립니다.
다음은 테스트 코드입니다.
여기서 constructor()를 직접 호출하면 왜 this의 포인터가 바뀌고 자동으로 새 객체가 생성되나요? constructor() 메소드의 내부 구현이 이에 영향을 줍니까?
이것과
constructor()
方法的内部实现没有什么关系,其实就是函数内this指向的问题。当函数作为对象的属性调用的时候,
this
指向这个对象;当函数直接调用的时候,在非严格模式下,
this
指向window
;p1.constructor
指向的就是Person
函数,当调用p1.constructor();
时,Person
是作为p1
的属性调用的,所以this
指向p1
;当调用var p2 = p1.constructor;p2();
时,其实就相当于直接调用Person();
,所以this
指向window
.