Heim  >  Artikel  >  Web-Frontend  >  Besprechen Sie einige Techniken zur Verwendung von JavaScript-Variablentypen

Besprechen Sie einige Techniken zur Verwendung von JavaScript-Variablentypen

伊谢尔伦
伊谢尔伦Original
2017-07-18 10:41:541515Durchsuche

JS unterstützt die folgenden Arten von Variablen: lokale Variablen, Klassenvariablen, private Variablen, Instanzvariablen, statische Variablen und globale Variablen.

Lokale Variablen:
Lokale Variablen beziehen sich im Allgemeinen auf Variablen, die innerhalb des Gültigkeitsbereichs von {} gültig sind, dh Variablen, die innerhalb des Anweisungsblocks gültig sind, wie zum Beispiel:

function foo(flag)  
{  
 var sum = 0;  
 if(flag == true)  
 {  
  var index;  
  for(index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
}  
 document.write("index is :"+index+"<br>");  
 return sum;  
}  
//document.write("sum is :" +sum+"<br>");  
document.write("result is :"+foo(true)+"<br>");

Nachdem der Code ausgeführt wurde, lauten die Ausgabeergebnisse: „Index ist: undefiniert“ und „Ergebnis ist: 0“. Wir können sehen, dass der Wert der Indexvariablen, die wir ausgeben möchten, undefiniert ist. das heißt, undefiniert. Daher können wir feststellen, dass die Indexvariable nach dem Ende des if-Anweisungsblocks zerstört wird. Was ist mit der Variablen „Summe“? Diese Variable wird zerstört, nachdem der Funktionsabschnitt foo() ausgeführt wurde. Wenn Sie die von mir kommentierte Anweisung entfernen und erneut ausführen, werden Sie feststellen, dass das System einen Fehler meldet. Es ist erwähnenswert, dass, wenn ich die Funktion foo() oben wie folgt ändere:

function foo(flag)  
 {  
  var sum = 0;  
  for(var index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
  document.write("index is :"+index+"<br>");  
  return sum;  
}

Sie sehen können, dass der Indexwert ausgegeben werden kann („Index ist :10“) ), das ist js. Anders als in anderen Sprachen wird der Index erst nach Verwendung der Funktion foo() zerstört, da der Index außerhalb von {} der for-Schleife definiert wird.

Klassenvariable:
Klassenvariable ist eigentlich ein Attribut oder Feld oder eine Methode der Klasse. Diese Variable wird automatisch zerstört, nachdem ein Instanzobjekt der Klasse zerstört wurde, wie z. B. der Student, den wir oben erwähnt haben Anfangsart. Darüber wollen wir nicht viel diskutieren, Sie können es selbst ausprobieren.

Private Variable:
Private Variable ist ein Attribut, das intern von einer Klasse verwendet wird und nicht extern aufgerufen werden kann. Ihre Definition wird mit var deklariert. Beachten Sie, dass die Variable, wenn sie nicht mit var deklariert wird, eine globale Variable ist (wir werden sie weiter unten besprechen), wie zum Beispiel:

function Student(name,age,from)  
{  
 this.name = FormatIt(name);  
 this.age = age;  
this.from = from;  
 var origName = name;  
 var FormatIt = function(name)  
 {  
 return name.substr(0,5);  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}

Hier haben wir zwei private origName und FormatIt() definiert Variablen (gemäß der objektorientierten Interpretation sollten sie als Attribute der Klasse bezeichnet werden).
Wir nennen die Methode in diesem Fall auch eine Variable, da die Variable in diesem Fall eine Funktionstypvariable ist und die Funktion auch zur Vererbungsklasse der Object-Klasse gehört. In diesem Fall definieren wir var zfp = new Student("3zfp",100,"ShenZhen"). Auf diese beiden Variablen kann jedoch nicht über zfp.origName und zfp.FormatIt() zugegriffen werden.

Beachten Sie folgende Punkte:

1. Private Variablen können dadurch nicht angegeben werden.
2. Der Aufruf einer Variablen vom privaten Methodentyp muss nach der Deklaration der Methode erfolgen. Beispielsweise transformieren wir die Student-Klasse wie folgt:

function Student(name,age,from)  
{  
 var origName = name;  
 this.name = FormatName(name);  
 this.age = age;  
 this.from = from;  
 var FormatName = function(name)  
 {  
  return name+".china";  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}  
var zfp = new Student("3zfp",100,"ShenZhen");

Nachdem der Code ausgeführt wurde, wird der Fehler „Objekt nicht gefunden“ gemeldet. Dies bedeutet, dass FormatName() nicht definiert ist.

3. Private Methoden können nicht auf die dadurch angegebene Variable (öffentliche Variable) zugreifen, wie folgt:

function Student(basicinfo)  
{  
 this.basicInfo = basicinfo;  
 var FormatInfo = function()  
 {  
  this.basicInfo.name = this.basicInfo.name+".china";  
 }  
 FormatInfo();  
}  
function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
var zfp = new Student(new BasicInfo("3zfp",100,"ShenZhen"));

Nach der Ausführung des Codes fordert das System „this.basicInfo“ auf ist leer oder kein Objekt“-Fehler.
Die grundlegende Schlussfolgerung ist, dass private Methoden nur auf private Eigenschaften zugreifen können, nachdem sie deklariert und zugewiesen wurden.

Statische Variablen gehören einer Klasse Eigene Attribute, greifen Sie über Klassenname + „.“ + statischen Variablennamen auf dieses Attribut zu. Eine klare Erklärung kann wie folgt gegeben werden:

function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
BasicInfo.generalInfo = "is 3zfp owned object";  
var basic = new BasicInfo("zfp",100,"ShenZhen");  
document.write(basic.generalInfo+"<br>");  
document.write(BasicInfo.generalInfo+"<br>");  
BasicInfo.generalInfo = "info is changed";  
document.write(BasicInfo.generalInfo+"<br>");
Wenn Sie den obigen Code ausführen, erhalten Sie die folgenden Ergebnisse:


undefined 
is 3zfp owned object 
info is changed
Beachten Sie Folgendes Punkte:

1, deklarieren Sie eine statische Variable in der Form von Klassenname + „.“ + statischer Variablenname
2 Statische Variablen sind keine eindeutigen Attribute für ein Instanzobjekt der Klasse, sondern werden vom Objekt gemeinsam genutzt .
3, kann über den Instanzobjektnamen + „.“ + statischen Variablennamen aufgerufen werden.

Globale Variablen:
Globale Variablen sind Variablen, die während des Betriebs des gesamten Systems eine effektive Zugriffskontrolle haben. Sie werden normalerweise am Anfang eines JS-Codes definiert, wie zum Beispiel:

var copyright = "3zfp owned";  
var foo =function()  
{  
 window.alert(copyright);  
}
Beachten Sie die folgenden Punkte:

1. Wenn eine Variable ohne var deklariert wird, wird sie als globale Variable betrachtet. Beispiel:

var copyright = "3zfp owned"; 
var foo =function(fooInfo) 
{ 
 _foo = fooInfo; 
document.write(copyright+"<br>"); 
} 
new foo("foo test"); 
document.write(_foo+"<br>"); 
执行代码,将得到如下结果: 
3zfp owned 
foo test 
但是,这个又有一个注意的地方,function是编译期对象,也就是说_foo这个全局变量要在foo对象被实例化后才能被初始化,也就是说如果将 
new foo(); 
document.write(_foo+"<br>"); 
对调成 
document.write(_foo+"<br>"); 
new foo(); 
系统将提示 "_foo 未定义"。
2. Wenn Sie ein lokales Variablenattribut mit demselben Namen wie die globale Variable definieren, gehen Sie wie folgt vor:

var copyright = "3zfp owned";  
var foo =function(fooInfo)  
{  
 var copyright = fooInfo; //同名变量  
 this.showInfo = function()  
 {  
 document.write(copyright+"<br>");  
 }  
}  
new foo("foo test").showInfo();  
document.write(copyright+"<br>");
Führen Sie den Code aus erhält die folgenden Ergebnisse:

3zfp-Besitz
foo test
Der Grund dafür ist, dass die Definition von Funktionsvariablen während der Kompilierung abgeschlossen wird, dh die Definition des Urheberrechts in foo und seines Umfangs wird während der Kompilierung abgeschlossen ist nur innerhalb des foo-Objekts gültig und hat nichts mit dem extern definierten globalen Variablen-Copyright zu tun.

Das obige ist der detaillierte Inhalt vonBesprechen Sie einige Techniken zur Verwendung von JavaScript-Variablentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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