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'。内部变量是匿名函数的局部变量,但是由于该闭包而引用了它。 –