JavaScript中判斷函數(shù)是new還是()調(diào)用的區(qū)別說(shuō)明
更新時(shí)間:2011年04月07日 23:38:19 作者:
具名函數(shù)的各種調(diào)用方式 在之前篇幅中已經(jīng)介紹過(guò)了。這篇看看如何判斷一個(gè)函數(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ù)/類作為自身實(shí)例對(duì)象的方法時(shí)調(diào)用就出問(wèn)題了
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一個(gè)對(duì)象
p.fn = Person; // 把函數(shù)/類 Person 賦值給自身對(duì)象p的fn屬性
p.fn(); // 這句調(diào)用時(shí)提示“這是new調(diào)用”,顯然不對(duì)
還有更好的方法嗎?
復(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ù)/類作為自身實(shí)例對(duì)象的方法時(shí)調(diào)用就出問(wèn)題了
復(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一個(gè)對(duì)象
p.fn = Person; // 把函數(shù)/類 Person 賦值給自身對(duì)象p的fn屬性
p.fn(); // 這句調(diào)用時(shí)提示“這是new調(diào)用”,顯然不對(duì)
還有更好的方法嗎?
您可能感興趣的文章:
- 你可能不知道的JavaScript的new Function()方法
- js之ActiveX控件使用說(shuō)明 new ActiveXObject()
- Javascript new Date().valueOf()的作用與時(shí)間戳由來(lái)詳解
- 關(guān)于js new Date() 出現(xiàn)NaN 的分析
- 在.NET中使用Newtonsoft.Json轉(zhuǎn)換,讀取,寫入的方法介紹
- javascript中IE瀏覽器不支持NEW DATE()帶參數(shù)的解決方法
- js中關(guān)于new Object時(shí)傳參的一些細(xì)節(jié)分析
- Javascript的無(wú)new構(gòu)建實(shí)例詳解
相關(guān)文章
云開(kāi)發(fā)進(jìn)階uniCloud-db組件與JQL語(yǔ)法的轉(zhuǎn)換詳解
這篇文章主要為大家介紹了云開(kāi)發(fā)進(jìn)階uniCloud-db組件與JQL語(yǔ)法的轉(zhuǎn)換詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03基于javascript實(shí)現(xiàn)最簡(jiǎn)單選項(xiàng)卡切換
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)最簡(jiǎn)單選項(xiàng)卡切換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02小程序點(diǎn)餐界面添加購(gòu)物車左右擺動(dòng)動(dòng)畫(huà)
這篇文章主要介紹了小程序點(diǎn)餐界面添加購(gòu)物車左右擺動(dòng)動(dòng)畫(huà),當(dāng)用戶點(diǎn)擊添加到購(gòu)物車后會(huì)有一個(gè)左右擺動(dòng)的購(gòu)物車提示效果,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09利用javascript實(shí)現(xiàn)禁用網(wǎng)頁(yè)上所有文本框,下拉菜單,多行文本域
這篇文章主要介紹了利用javascript實(shí)現(xiàn)禁用網(wǎng)頁(yè)上所有文本框,下拉菜單,多行文本域。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12JavaScript實(shí)現(xiàn)控制打開(kāi)文件另存為對(duì)話框的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)控制打開(kāi)文件另存為對(duì)話框的方法,實(shí)例分析了javascript實(shí)現(xiàn)文件另存為的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04微信小程序中網(wǎng)絡(luò)請(qǐng)求緩存的解決方法
這篇文章主要給大家介紹了關(guān)于微信小程序中網(wǎng)絡(luò)請(qǐng)求緩存的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12