1

次のコードを使用して、com.foo という名前の新しい名前空間を定義します。

function extendNamespace(ns, ns_string) {
    var parts = ns_string.split('.');
    var parent = ns;

    for (var i = 0; i < parts.length; i++) {
        //create a property if it doesnt exist
        if (typeof parent[parts[i]] == 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return ns;
}

var com = {};
extendNamespace(com, "com.foo");

console.log(com); // OK (even has an object called "foo"!!)
console.log(com.foo); // Undefined ???

の最初の呼び出しはconsole.log(com)、「foo」というオブジェクトを持つ新しいオブジェクト「com」が作成されたことをコンソールに明確に示しています。

ここまでは順調ですね。

ただし、 2番目の呼び出しconsole.log(com.foo);では「未定義」が返されます。

何を与える?

4

1 に答える 1

4

console.log(com) の最初の呼び出しは、「foo」というオブジェクトを持つ新しいオブジェクト「com」が作成されたことをコンソールに明確に示しています。

いいえ。 というプロパティがcomあり、その値は というプロパティを持つオブジェクトfooです。

でのみ拡張comcom.fooたい場合は、 で拡張していfooます。

于 2012-08-17T21:36:16.423 に答える