0
我有下面的代碼有和沒有模塊模式。我已經在執行旁邊給出了結果。在模塊模式中,我可以更改foo和set_inner,而在函數對象(非模塊)中,我不能更改foo和set_inner。爲什麼這個javascript對象的行爲與模塊模式不一樣?
module pattern:
var someObj = (function() {
var instance = {},
inner = 'some value';
instance.foo = 'blah';
instance.get_inner = function() {
return inner; };
instance.set_inner = function (s) {
inner = s; };
return instance; })();
someObj.get_inner();//some value
someObj.set_inner("kkkk");
someObj.get_inner();//kkk
someObj.foo;//blah
someObj.foo="ddd";
someObj.foo;//ddd
non-module:
var someObj = function() {
var instance = {},
inner = 'some value';
instance.foo = 'blah';
instance.get_inner = function() {
return inner; };
instance.set_inner = function (s) {
inner = s; };
return instance; };
someObj().get_inner();//some value
someObj().foo;//blah
someObj.foo="aaa";
someObj().foo;//blah
someObj().set_inner("kkk");
someObj().get_inner();//some value
任何幫助,非常感謝。謝謝!
謝謝,我需要有關鍵字「變種」之前,我聲明inner ='some value',inner不是實例的屬性,但get_inner和set_inner是訪問inner的實例上的方法。他們訪問這裏的原因是因爲關閉,我說得對嗎?或者是內部的,實例 –
的屬性是的,'get_inner'和'set_inner'通過閉包訪問'inner'。內部變量是匿名函數的局部變量,但是由於該閉包而引用了它。 –