2017-06-09 5 views
0

Ich habe keine Probleme mit diesem Code, aber ich bin sehr neugierig, warum die Funktion unten scheint eine Unterstreichung in ihrem Namen zu brauchen.Javascript - Benötigen Sie einen Unterstrich in Funktionsname?

function _clear() 
    { 
     document.getElementById("test").innerHTML = ""; 
    } 

Die Funktion _clear() wird erst nach einem Klick auf die Schaltfläche ausgeführt, wenn der Funktionsname einen Unterstrich enthält.

<button type="submit" onClick="_clear()">Clear</button> 
+1

Mögliches Duplikat von [Underscore-Präfix für Eigenschaften- und Methodennamen in JavaScript] (https://stackoverflow.com/questions/4484424/underscore-prefix-for-property-and-method-names-in-javascript) – Chris

+2

I Think 'clear' ist eine eingebaute Funktion. Daher versucht Ihr Browser, die Basisfunktion aufzurufen, und nicht die, die Sie zuvor definiert haben. – Abrikot

+1

können Sie ein Arbeitsmodell bereitstellen –

Antwort

2

Nach der MDN ist clear() eine Methode des Document-Objekts, die man durch Schreiben document.clear() aufrufen kann. Aber da diese Methode veraltet ist, sollte man sie überhaupt nicht nennen. Tatsächlich macht die Methode in HTML5 nichts (siehe HTML5 spec).

Also, bis diese Methode tatsächlich aus dem Document-Objekt entfernt wird, könnte man schließen, dass ein Potential Konflikt existiert eine benutzerdefinierte Funktion mit dem gleichen Namen wie die Methode des Dokuments. Das heißt, läuft der folgende Code nur gut mit Google Chrome (Version 49.0.2623.112 m):

var d = document; 
d.g = d.getElementById; 

function clear() 
{ 
     d.g("test").innerHTML = ""; 
    } 

var test = d.g("test"); 
test.onmouseover=clear; 

demo Siehe

Es ist unwahrscheinlich, dass es einen Konflikt zwischen klar ist() und document.clear() . Ich schrieb eine benutzerdefinierte Funktion, die den gleichen Namen wie eine andere Dokumentmethode verwendet und der Code lief einwandfrei; siehe here.

Offenbar, wenn das onclick Ereignisattribut die benutzerdefinierte Funktion "clear()" gegeben wird, gibt es eine Art von Verwirrung mit clear() verbunden mit document.clear(); siehe here und lesen Sie die ausgezeichnete Erklärung in der offiziellen Antwort. Kurz gesagt, das Problem läuft auf "... das Dokument-Objekt ist in der Scope-Kette vor dem Window-Objekt (...)" (siehe JavaScript: The Definitive Guide).

Wenn aus irgendeinem Grund Sie bestimmt für den Code, um hier zu arbeiten, wie Sie den richtigen Kontext spezifizieren:

HTML:

<div id="test">a test to see if this will clear</div> 
<button id="but" onclick="window.clear()">Clear</button> 

Also, die benutzerdefinierte Funktion wird tatsächlich ein Verfahren zur Herstellung das Window-Objekt, neben den eingebauten Fenstern wie window.open(), so dass der Code ausgeführt werden kann; siehe here.

Hinweis, der beste Weg, um eine Aktion haben auftritt, wenn ein Klick-Ereignis ist auftritt, diese Zeile in Ihrem JavaScript-Code eine Schaltfläche mit der ID „sondern“ gegeben setzen:

but.addEventListener('click',clear); 

demo See.

0

Das weil clear() ist eine Funktion, die bereits in JavaScript vorhanden ist. Sie könnten auch den Unterstrich am Ende hinzufügen oder ein anderes c hinzufügen oder irgendetwas tun, so dass die Funktion einen anderen Namen hat.

Verwandte Themen