首頁 web前端 js教程 JavaScript中判断函数是new还是()调用的区别说明_javascript技巧

JavaScript中判断函数是new还是()调用的区别说明_javascript技巧

May 16, 2016 pm 06:08 PM
new 判斷函數

方式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调用”,显然不对

还有更好的方法吗?
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

go語言中make和new的差別是什麼 go語言中make和new的差別是什麼 Jan 09, 2023 am 11:44 AM

區別:1、make只能用來分配及初始化類型為slice、map、chan的資料;而new可以分配任意類型的資料。 2.new分配返回的是指針,即類型「*Type」;而make返回引用,即Type。 3.new分配的空間會被清除;make分配空間後,會初始化。

java中的new關鍵字怎麼用 java中的new關鍵字怎麼用 May 03, 2023 pm 10:16 PM

1.概念在Java語言裡,「new」表達式是負責建立實例的,其中會呼叫構造器去對實例做初始化;構造器本身的回傳值類型是void,並不是「建構器回傳了新建立的物件的參考”,而是new表達式的值是新建立的物件的參考。 2.用途新建類別的物件3.工作機制為物件成員分配記憶體空間,並指定預設值對成員變數進行明確初始化執行建構方法計算並傳回參考值4.實例new操作往往意味著記憶體中的開啟新的記憶體空間,這個記憶體空間分配在記憶體中的堆區,受到jvm控制,自動進行記憶體管理。這裡我們就是用String這個類別來舉例說明。 pu

常用的excel判斷函數分享 常用的excel判斷函數分享 Mar 19, 2024 pm 09:30 PM

Excel表格存在於各行各業,無論你是職場工作人員還是老師,甚至是國家機關工作人員,都要頻繁用到Excel工具,掌握好Excel操作技巧能夠讓自己的工作增光添彩,必要時能助力自己升職加薪。本文小編主要為大家分享常用的Excel判斷函數。一、常用的excel判斷函數1、IF函數:根據條件判斷傳回不同的值;語法=IF(條件判斷,結果為真返回值,結果為假回傳值)2、OR函數:對多個邏輯條件進行判斷;語法=OR(條件1=標準1,條件2=標準2,......條件N=標準N)3、AND函數:多條件同時成立;

js中new運算子工作原理是什麼 js中new運算子工作原理是什麼 Feb 19, 2024 am 11:17 AM

js中new運算元工作原理是什麼,需要具體程式碼範例js中的new操作符是用來建立物件的關鍵字。它的作用是根據指定的建構函數建立一個新的實例對象,並傳回該對象的參考。在使用new運算元時,實際上進行了以下幾個步驟:建立一個新的空物件;將該空物件的原型指向建構函式的原型物件;將建構函式的作用域賦給新物件(因此this指向了新物件);執行建構函式中的程式碼,並給新對

全新富士固定鏡頭 GFX 相機將首次推出全新的中片幅感光元件,可能開啟全新系列 全新富士固定鏡頭 GFX 相機將首次推出全新的中片幅感光元件,可能開啟全新系列 Sep 27, 2024 am 06:03 AM

近年來,富士膠片取得了巨大的成功,這主要歸功於其膠片模擬技術以及其緊湊型測距相機在社交媒體上的流行。然而,據 Fujirumors 稱,它似乎並沒有滿足於現狀。你

如何使用Java中的clone()方法來取代new關鍵字? 如何使用Java中的clone()方法來取代new關鍵字? Apr 22, 2023 pm 07:55 PM

使用clone()取代new在Java中新建物件實例最常用的方法是使用new關鍵字。 JDK對new的支援非常好,使用new關鍵字建立輕量級物件時,速度非常快。但是,對於重量級對象,由於物件在建構函式中可能會進行一些複雜且耗時的操作,因此,建構函式的執行時間可能會比較長。導致系統短期內無法獲得大量的實例。為了解決這個問題,可以使用Object.clone()方法。 Object.clone()方法可以繞過建構函數,快速複製一個物件實例。但是,在預設情況下,clone()方法產生的實例只是原始物件的淺拷

java中如何使用new實例化 java中如何使用new實例化 May 16, 2023 pm 07:04 PM

1.概念就是「建立一個Java物件」-----分配記憶體並傳回指向該記憶體的參考。 2.注意事項(1)Java關鍵字new是一個運算子。與+、-、*、/等運算子具有相同或類似的優先權。 (2)建立一個Java物件需要三個步驟:宣告參考變數、實例化、初始化物件實例。 (3)實列化之前會預設呼叫父類別的無參構造,也就是要創建父類別的物件3.兩種實例化方法(1)物件名稱=new類別名稱(參數1,參數2...參數n);物件名稱.方法();(2)new類別名稱(參數1,參數2...參數n).方法;4.實例用一個簡單的程式碼來說明使物件實

See all articles