JavaScriptでは、関数がnewか()呼び出しの違いについて説明しています.

1533 ワード

方式1
 
  
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof Person){
alert('new ');
}else{
alert(' ');
}
}
var p = new Person('jack',30); // --> new
Person(); // -->
方式2
 
  
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof arguments.callee){
alert('new ');
}else{
alert(' ');
}
}
var p = new Person('jack',30); // --> new
Person(); // -->
方式3
 
  
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new ');
}else{
alert(' ');
}
}
var p = new Person('jack',30); // --> new
Person(); // -->
完璧そうですが、関数/クラスを自身のインスタンスオブジェクトとする方法で呼び出すと問題があります.
 
  
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new ');
}else{
alert(' ');
}
}
var p = new Person('jack',30); // new
p.fn = Person; // / Person p fn
p.fn(); // “ new ”,
もっといい方法がありますか?