>  기사  >  웹 프론트엔드  >  JavaScript_javascript 스킬에서 함수가 new인지 ()인지 판단하는 차이점에 대한 설명

JavaScript_javascript 스킬에서 함수가 new인지 ()인지 판단하는 차이점에 대한 설명

WBOY
WBOY원래의
2016-05-16 18:08:171558검색

방법 1

코드 복사 코드는 다음과 같습니다.

function Person(n,a) {
this.name = n;
this.age = a;
if(이 인스턴스of Person){
alert('new call')
}else{
alert ('함수 호출');
}
}
var p = new Person('jack',30) // --> 새로운 호출
Person(); > 함수 호출

방법 2
코드 복사 코드는 다음과 같습니다.

function Person(n,a){
this.name = n;
this.age = a
if(this 인스턴스ofargs.callee){
alert(' 새 호출');
}else{
alert('함수 호출');
}
}
var p = new Person('jack',30); > 새 호출
Person(); // --> 함수 호출

방법 3
코드 복사 코드는 다음과 같습니다. function Person(n,a){
this.name = n
this.age = a; if(this.constructor === 인수 .callee){
alert('새 호출')
}else{
alert('함수 호출')
}
}
var p = new Person(' jack',30); // --> 새로운 호출
Person(); // --> 함수 호출


그런데 함수/클래스를 다음과 같이 사용할 경우 자신의 인스턴스 객체의 메소드를 호출할 때 문제가 발생합니다



코드를 복사하세요
코드는 다음과 같습니다: function Person(n,a){ this.name = n
this.age = a
if(this.constructor == =args.callee){
alert('new call' );
}else{
alert('function call')
}
}
var p = new Person ('jack',30); // 새 객체 먼저
p.fn = Person; // 자체 객체의 fn 속성에 함수/클래스 할당 p
p.fn(); 이 문장을 호출하면 "새 호출입니다."라는 메시지가 나오는데 이는 분명히 잘못된 것입니다


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