Dieses Mal zeige ich Ihnen, wie Sie die Funktion clone() von JS verwenden. Was sind die Vorsichtsmaßnahmen bei der Verwendung der Funktion clone() von JS? sehen.
1. Lösen Sie den Problemcode
Fügen Sie den Code direkt ein,
function clone(obj){ var copy; switch(typeof obj){ case 'undefined':break; case 'number': case 'string': case 'boolean': case 'function':copy = obj;break; case 'object': if(obj == null) copy = null; else if(toString.call(obj) === '[object Array]') { copy = []; for(var i in obj) copy.push(clone(obj[i])); } else if(toString.call(obj) === '[object RegExp]') { copy = obj; } else { copy = {}; for(var j in obj) copy[j]= clone(obj[j]); } } return copy; } var a=undefined; var b=1; var c="Hello"; var d=true; var add=function(a,b){ return a+b; } var e=null; var f=[1,2,3]; var g=/^\s+/; var h={ a:1, b:2 } console.log(typeof clone(a)); console.log(typeof clone(b)); console.log(typeof clone(c)); console.log(typeof clone(d)); console.log(clone(add)(1,2)); console.log(Object.prototype.toString.call(clone(e))); console.log(Object.prototype.toString.call(clone(f))); console.log(Object.prototype.toString.call(clone(g))); console.log(Object.prototype.toString.call(clone(h)));
Ergebnis:
Als ich diese Frage zum ersten Mal sah, dachte ich, dass das Ergebnis von typeof [1,2,3] ist. Was soll ich tun? , Der Typ von Null und Objekt ist beide . Wenn man sich den obigen Code ansieht, wird er mit Object.prototype.toString.call(obj) oder toString.call(obj) gelöst. Warum dann nicht direkt obj.toString() verwenden? Schauen wir uns zunächst an, was obj.toString() ausgeben wird.
null und undefiniert sind eigentlich falsch, das ist sicher, denn toString() kann die Transformation von null und undefiniert nicht abschließen, sondern nur String()
Wenn String() etwas anderes als null oder undefiniert konvertiert, wird es automatisch in toString() konvertiert. Ich gehe zu weit. . Kehren wir zum Thema zurück
Was ist also das Ergebnis der Verwendung von Object.prototype.toString.call(obj)?Es ist anders. Was ist los?
Es stellt sich heraus, dass Array, Null und andere Typen zwar Instanzen von Object sind, sie jedoch jeweils die toString()-Methode überschreiben. Versuchen wir es zu überprüfen:Ergebnis:
var arr=[1,2,3]; console.log(Array.prototype.hasOwnProperty("toString"));//判断原型中是否有toString()方法console.log(arr.toString());delete Array.prototype.toString;//删除Array原型里面重写的toStringconsole.log(Array.prototype.hasOwnProperty("toString")); console.log(arr.toString());
Offensichtlich wurde es wirklich neu geschrieben.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website! Empfohlene Lektüre:Wie text-align die Ausrichtung an beiden Enden erreicht
MySQL-Root-Passwort auf Mac-System zurücksetzen
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die clone()-Funktion von JS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!