DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JavaScript中判斷函數是new還是()調用的區別說明
JavaScript中判斷函數是new還是()調用的區別說明
編輯:關於JavaScript     
方式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調用”,顯然不對

還有更好的方法嗎?
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved