2011-03-03 12 views
0

好的內是可訪問的,所以我知道,通過關閉我可以做這樣的事情:外部設定的變量應該對象

var x, 
    obj = { 
      init: function() { 
      x = 123; 
      }, 

      func: function() { 
      return x; 
      } 

    }; 

obj.init(); 
obj.func(); 
==> 123 

不過,我想從外部能夠爲X應用價值(外對象,後來上)的...我想,也許我可能只是這樣做:

var obj = { 
      init: function() { 
       // do something nice here... 
      }, 

      func: function() { 
       return x; 
      } 
    }; 

var foo = { 
      doIt: function() { 

       var init = obj.init; 
       var x; 

       obj.init = function() { 
       x = 456; 
       init.apply(obj); 
       } 

       obj.init(); 
       obj.func(); 
      } 
}; 

foo.doIt(); 
==> (error) x is not defined 

但是,它不工作..這是可以做到的某種方式?

謝謝。

+0

不知道我究竟明白了什麼你試圖做...爲x應該是全球性的?或者它應該是obj中的變量,還是你希望它是一個私有變量......我不清楚你想在這裏做什麼。 – Zoidberg 2011-03-03 02:57:40

+0

x應該是obj中的一個變量。最終,我試圖解決一個問題,即無法在嵌套在多個函數中時使用「this」來引用對象本身。我總是需要在對象的init方法中定義'self = this',並且我正在尋找一種方法來實現這種自動化,所以我的所有對象默認都有一個自變量,它會引用對象本身。下面是我真正在做的一個例子:http://pastie.org/1627048 – patrick 2011-03-03 03:06:01

回答

1

您可以使用new運算符創建類型的對象,並設置該對象的屬性。

function Foo() { 
    this.init = function() { 
     this.x = -1; 
    }; 

    this.func = function() { 
     return this.x; 
    }; 
} 

var o = new Foo; 
o.x = 941; 
o.func(); // 941 
o.x = 22; 
o.func(); // 22