var optionsCache = {};// Convert String-formatted options into Object-formatted ones and store in cachefunction createOptions( options ) {var object = optionsCache[ options ] = {};jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {object[ flag ] = true;});return object;}createOptions('once momery');这个函数执行后,为什么optionsCache[ options ]={once:true,momery:true},我想知道的是他为什么和object的值一样,可是我在each外单独改变object的值,optionsCache[ options ]却不跟着改变??
1 回答

ibeautiful
TA贡献1993条经验 获得超6个赞
var object = optionsCache[ options ] = {};这里是一个指针引用,两个对象指向同一个地方,所以给object赋值等同于给optionsCache赋值。
你在each外单独给object赋值,是重新赋值一个对象给它,改变了引用,两个指针指向已经不是同一个地方,故optionsCache不会改变。
如果想在each外通过改变object对象来修改optionsCache值,应该是通过改变属性的方法如object["once"]=false;这样optionsCache的值会同时改变。
举个指针对象的例子如下:
var temp = { name: "temp" };
var temp2 = temp;
temp = { name: "not temp2" }; //修改了temp的引用
temp === temp2; //false
var temp = { name: "temp" };
var temp2 = temp;
temp.name = "also
temp2"; //修改的只是指针指向的实例本身
temp === temp2; //true
添加回答
举报
0/150
提交
取消