为了账号安全,请及时绑定邮箱和手机立即绑定

以下关于jQuery源码中,createOptions函数的问题,求解释~

以下关于jQuery源码中,createOptions函数的问题,求解释~

慕妹3146593 2022-04-01 17:11:36
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

查看完整回答
反对 回复 2022-04-06
  • 1 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号