ホームページ  >  記事  >  ウェブフロントエンド  >  JSのclone()関数の使い方

JSのclone()関数の使い方

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-20 09:58:535966ブラウズ

今回はJSのclone()関数の使い方と、JSのclone()関数を使用する際の注意点を紹介します。実際の事例を見てみましょう。

1. 問題解決コード


コードを直接投稿してください。

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)));
結果:

2. この質問を最初に見たとき、私は typeof [1,2] の結果を思い出しました。 ,3] はい

、どうすればよいですか?

オブジェクトの正規表現

、null、および typeof はすべて です。上記のコードを見ると、Object.prototype.toString.call(obj) または toString.call(obj) を使用して解決されています。 それでは、obj.toString() を直接使用しないのはなぜでしょうか?まず、obj.toString() が何を出力するかを見てみましょう。

null と未定義は実際には問題が発生しました。これは確かです。toString() は null と未定義の変換を完了できないため、String() のみを使用してください。

String() が null またはunknown の場合、自動的に toString() に変換されます。 。本題に戻りましょう

それでは、Object.prototype.toString.call(obj) を使用した結果はどうなるでしょうか?

実際は違うのですが、何が起こっているのでしょうか?

Array、Null、その他の型は Object のインスタンスですが、それぞれ toString() メソッドをオーバーライドしていることがわかりました。検証してみましょう:

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());
結果:

明らかに実際に書き換えられています。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

text-align が両端での配置を実現する方法

MySQL が Mac システムの root パスワードをリセットする


以上がJSのclone()関数の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。