Heim Web-Frontend js-Tutorial JavaScript中判断函数是new还是()调用的区别说明_javascript技巧

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

May 16, 2016 pm 06:08 PM
new Urteilsfunktion

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

还有更好的方法吗?
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen make und new in der Go-Sprache? Was ist der Unterschied zwischen make und new in der Go-Sprache? Jan 09, 2023 am 11:44 AM

Unterschiede: 1. Make kann nur zum Zuweisen und Initialisieren von Daten der Typen Slice, Map und Chan verwendet werden, während new jeden Datentyp zuordnen kann. 2. Die neue Zuweisung gibt einen Zeiger vom Typ „*Type“ zurück, während make eine Referenz vom Typ „Type“ zurückgibt. 3. Der von new zugewiesene Speicherplatz wird gelöscht. Nachdem make den Speicherplatz zugewiesen hat, wird er initialisiert.

So verwenden Sie das neue Schlüsselwort in Java So verwenden Sie das neue Schlüsselwort in Java May 03, 2023 pm 10:16 PM

1. Konzept In der Java-Sprache ist der „neue“ Ausdruck für die Erstellung einer Instanz verantwortlich. Der Konstruktor wird aufgerufen, um die Instanz zu initialisieren „Objektreferenz“, aber der Wert des neuen Ausdrucks ist eine Referenz auf das neu erstellte Objekt. 2. Zweck: Erstellen Sie ein Objekt einer neuen Klasse. 3. Arbeitsmechanismus: Allokieren Sie Speicherplatz für Objektmitglieder und geben Sie Standardwerte explizit an, führen Sie Konstruktionsmethodenberechnungen durch und geben Sie häufig Referenzwerte zurück bedeutet, neue im Speicher zu öffnen. Der Speicherplatz wird im Heap-Bereich im Speicher zugewiesen. Er wird von JVM gesteuert und verwaltet den Speicher. Hier verwenden wir die String-Klasse als Beispiel. Pu

Gemeinsame Nutzung häufig verwendeter Excel-Beurteilungsfunktionen Gemeinsame Nutzung häufig verwendeter Excel-Beurteilungsfunktionen Mar 19, 2024 pm 09:30 PM

Excel-Tabellen gibt es in allen Lebensbereichen, egal ob Sie am Arbeitsplatz arbeiten, Lehrer sind oder sogar Mitarbeiter einer staatlichen Behörde sind. Die Beherrschung von Excel-Bedienungskenntnissen kann Ihrer Arbeit Glanz verleihen und Ihnen dabei helfen notwendig, befördert zu werden. Der Herausgeber dieses Artikels teilt Ihnen hauptsächlich häufig verwendete Excel-Beurteilungsfunktionen mit. 1. Häufig verwendete Excel-Beurteilungsfunktionen 1. IF-Funktion: Gibt unterschiedliche Werte gemäß der bedingten Beurteilung zurück =IF (bedingte Beurteilung, das Ergebnis ist ein wahrer Rückgabewert, das Ergebnis ist ein falscher Rückgabewert) 2. ODER Funktion: Mehrere logische Bedingungen ausführen. Urteil; Syntax = ODER (Bedingung 1 = Kriterium 1, Bedingung 2 = Kriterium 2, ... Bedingung N = Kriterium N) 3. UND-Funktion: Mehrere Bedingungen werden gleichzeitig festgelegt;

Wie funktioniert der neue Operator in js? Wie funktioniert der neue Operator in js? Feb 19, 2024 am 11:17 AM

Wie funktioniert der neue Operator in js? Es werden spezifische Codebeispiele benötigt. Der neue Operator in js ist ein Schlüsselwort, das zum Erstellen von Objekten verwendet wird. Seine Funktion besteht darin, ein neues Instanzobjekt basierend auf dem angegebenen Konstruktor zu erstellen und einen Verweis auf das Objekt zurückzugeben. Bei Verwendung des neuen Operators werden tatsächlich die folgenden Schritte ausgeführt: Erstellen eines neuen leeren Objekts; Verweisen des Prototyps des leeren Objekts auf das Prototypobjekt des Konstruktors; Zuweisen des Gültigkeitsbereichs des Konstruktors auf das neue Objekt Objekt); Führen Sie den Code im Konstruktor aus und geben Sie das neue Objekt an

Die neue GFX-Kamera mit festem Objektiv von Fujifilm stellt den neuen Mittelformatsensor vor und könnte den Auftakt einer völlig neuen Serie geben Die neue GFX-Kamera mit festem Objektiv von Fujifilm stellt den neuen Mittelformatsensor vor und könnte den Auftakt einer völlig neuen Serie geben Sep 27, 2024 am 06:03 AM

Fujifilm war in den letzten Jahren sehr erfolgreich, vor allem aufgrund seiner Filmsimulationen und der Beliebtheit seiner kompakten Kameras im Rangefinger-Stil in den sozialen Medien. Laut Fujirumors scheint sich das Unternehmen jedoch nicht auf seinen Lorbeeren auszuruhen. Die u

Wie verwende ich die clone()-Methode in Java anstelle des neuen Schlüsselworts? Wie verwende ich die clone()-Methode in Java anstelle des neuen Schlüsselworts? Apr 22, 2023 pm 07:55 PM

Verwenden von clone() anstelle von new Die häufigste Methode zum Erstellen einer neuen Objektinstanz in Java ist die Verwendung des Schlüsselworts new. Die Unterstützung von new durch JDK ist sehr gut. Die Verwendung des Schlüsselworts new zum Erstellen leichter Objekte ist sehr schnell. Bei schweren Objekten kann die Ausführungszeit des Konstruktors jedoch länger sein, da das Objekt möglicherweise einige komplexe und zeitaufwändige Vorgänge im Konstruktor ausführt. Dadurch kann das System kurzfristig keine große Anzahl an Instanzen erhalten. Um dieses Problem zu lösen, können Sie die Methode Object.clone() verwenden. Die Methode Object.clone() kann den Konstruktor umgehen und eine Objektinstanz schnell kopieren. Standardmäßig ist die von der clone()-Methode generierte Instanz jedoch nur eine flache Kopie des Originalobjekts.

So verwenden Sie die neue Instanziierung in Java So verwenden Sie die neue Instanziierung in Java May 16, 2023 pm 07:04 PM

1. Das Konzept ist „ein Java-Objekt erstellen“ ----- Speicher zuweisen und einen Verweis auf diesen Speicher zurückgeben. 2. Hinweise (1) Das Java-Schlüsselwort new ist ein Operator. Er hat die gleiche oder eine ähnliche Priorität wie +, -, *, / und andere Operatoren. (2) Das Erstellen eines Java-Objekts erfordert drei Schritte: Deklarieren von Referenzvariablen, Instanziieren und Initialisieren der Objektinstanz. (3) Vor der Instanziierung wird standardmäßig der parameterlose Konstruktor der übergeordneten Klasse aufgerufen, dh es muss ein Objekt der übergeordneten Klasse erstellt werden. 3. Zwei Instanziierungsmethoden (1) Objektname = neuer Klassenname (Parameter 1, Parameter 2... Parameter n); Objektname (); (2) neuer Klassenname (Parameter 1, Parameter 4). Objekt real

See all articles