JavaScript中判斷函數(shù)是new還是()調(diào)用的區(qū)別說明
更新時間:2011年04月07日 23:38:19 作者:
具名函數(shù)的各種調(diào)用方式 在之前篇幅中已經(jīng)介紹過了。這篇看看如何判斷一個函數(shù)是被new調(diào)用的,還是被其它方式調(diào)用的。
方式1
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof Person){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
方式2
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
方式3
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
看似很完美,但當(dāng)把函數(shù)/類作為自身實例對象的方法時調(diào)用就出問題了
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // 先new一個對象
p.fn = Person; // 把函數(shù)/類 Person 賦值給自身對象p的fn屬性
p.fn(); // 這句調(diào)用時提示“這是new調(diào)用”,顯然不對
還有更好的方法嗎?
復(fù)制代碼 代碼如下:
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof Person){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
方式2
復(fù)制代碼 代碼如下:
function Person(n,a){
this.name = n;
this.age = a;
if(this instanceof arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
方式3
復(fù)制代碼 代碼如下:
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // --> new調(diào)用
Person(); // --> 函數(shù)調(diào)用
看似很完美,但當(dāng)把函數(shù)/類作為自身實例對象的方法時調(diào)用就出問題了
復(fù)制代碼 代碼如下:
function Person(n,a){
this.name = n;
this.age = a;
if(this.constructor === arguments.callee){
alert('new調(diào)用');
}else{
alert('函數(shù)調(diào)用');
}
}
var p = new Person('jack',30); // 先new一個對象
p.fn = Person; // 把函數(shù)/類 Person 賦值給自身對象p的fn屬性
p.fn(); // 這句調(diào)用時提示“這是new調(diào)用”,顯然不對
還有更好的方法嗎?
您可能感興趣的文章:
- 你可能不知道的JavaScript的new Function()方法
- js之ActiveX控件使用說明 new ActiveXObject()
- Javascript new Date().valueOf()的作用與時間戳由來詳解
- 關(guān)于js new Date() 出現(xiàn)NaN 的分析
- 在.NET中使用Newtonsoft.Json轉(zhuǎn)換,讀取,寫入的方法介紹
- javascript中IE瀏覽器不支持NEW DATE()帶參數(shù)的解決方法
- js中關(guān)于new Object時傳參的一些細(xì)節(jié)分析
- Javascript的無new構(gòu)建實例詳解
相關(guān)文章
云開發(fā)進(jìn)階uniCloud-db組件與JQL語法的轉(zhuǎn)換詳解
這篇文章主要為大家介紹了云開發(fā)進(jìn)階uniCloud-db組件與JQL語法的轉(zhuǎn)換詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03利用javascript實現(xiàn)禁用網(wǎng)頁上所有文本框,下拉菜單,多行文本域
這篇文章主要介紹了利用javascript實現(xiàn)禁用網(wǎng)頁上所有文本框,下拉菜單,多行文本域。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12JavaScript實現(xiàn)控制打開文件另存為對話框的方法
這篇文章主要介紹了JavaScript實現(xiàn)控制打開文件另存為對話框的方法,實例分析了javascript實現(xiàn)文件另存為的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04