2

JavaScript関数のスコープを別の関数にコピーする方法はありますか?

(function(v){
     var Ct=v.Ct=function(){
     }
     var a="asdf";

     Ct.prototype.fun=function(){
          console.log(a);    //prints 'asdf'
     }
})(window)

--------------------------------------------------

上記のコードは変更できません。

Ct.prototype.funを書き直して「asdfasdf」を出力する方法

次の例では「a」を取得できません

Ct.prototype.fun=function(){
    console.log(a+a);   //It's not work
}

var o=new Ct();
o.fun();
4

2 に答える 2

0
(function(v){
 var Ct=v.Ct=function(){
 };
 var a="asdf";

 Ct.prototype.fun=(function(){
    return function(){
      console.log(a+a);    //prints 'asdf' 
 }
 })(a);
})(window);
var o=new Ct();
o.fun();
于 2013-01-10T03:41:18.327 に答える
0

アクセスしたい既存の変数または同様のものがある場合は、最初のクロージャー内にゲッターを提供し、コンテキストを介してアクセスできます。

(function(v){
     var Ct=v.Ct=function(){
     }
     var a="asdf";

     Ct.prototype.fun=function(){
          console.log(a);    //prints 'asdf'
     }
     Ct.prototype.getA = function() {
        return a; 
     }
})(window)

Ct.prototype.fun=function(){
    console.log(this.getA()+this.getA());
}

var o=new Ct();
o.fun();

より計画的なものについては、オブジェクトの使用方法を再考する方がよいでしょう。

于 2013-01-10T03:45:13.390 に答える