0

私の現在の名前空間はこのようなものです

var MY = MY || {};
MY.namespace = function(str){};

MY.namespace("new");つまり、基本的には、作成してから作成するだけです。My.new = function(){};

しかし今、私はのような2番目のパラメーターを渡したいと思いますMY.namespace("new", function(){});。どうすればこのアプローチを実現できますか?

edit1:

var MY.namespace = function(ns_string){
     var parts = ns_string.split('.'),
         parent =MY,i;
     if(parts[0]==="MY"){
         parts = parts.slice(1);
     }

     for(i=0; i< parts.length ;i++){
         if (typeof parent[parts[i]] ==="undefined"){
             parent[parts[i]] ={};
         }

         parent = parent[parts[i]];
     }
     return parent;
};
4

3 に答える 3

0

次を使用できます。

My.namespace = function(fnName, fnBody) {
  My[fnName] = fnBody;
}

例えば

My.namespace('sayHi', function(){alert('hi');});
My.sayHi();
于 2011-08-04T23:14:19.953 に答える
0

これがあなたの言いたいことかどうかわかりません。あなたの編集、Kevin の応答、およびコメントで提案しているように見えることを考慮すると、次のことを意味する可能性があります。

var MY = {};
MY.namespace = function(ns_string, fnBody){
 var parts = ns_string.split('.'),
     parent =MY,i,
     last = parts.slice(parts.length-1);

 console.log(parent);
 if(parts[0]==="MY"){
     parts = parts.slice(1);
 }

 if (parts.length !== 1) {
     parts = parts.slice(0, parts.length-1);
 }

 for(i=0; i< parts.length ;i++){
     if (typeof parent[parts[i]] ==="undefined"){
         parent[parts[i]] ={};
     }

     parent = parent[parts[i]];
 }
 parent[last] = fnBody;
 return parent;
};

これは次のように機能します

> MY.namespace('ns1.ns2.myFn', function(console.log('this is myFn')));
> MY.ns1.ns2.myFn();
this is myFn
于 2011-08-05T01:30:36.847 に答える
0

JavaScript では、関数の引数の数に制限はありません。関数内のargumentsオブジェクトを使用して、配列のような方法で関数に渡されたすべての引数にアクセスできます。パラメーター リストで名前が指定されていない場合でも同様です。

My.namespace = function(fnName) {
    // arguments[0] gives us the same things as fnName
    // however, using indexes from 1 to (arguments.length-1)
    // gives the other (nameless) parameters
}
于 2011-08-04T23:18:58.783 に答える