jQuery.data()的实现

1月 5, 2018 |

在jQuery 3 的实现中,当我们通过$("body").data("test")获取数据时通过dataUser 的expando属性从$("body")[0](原生的javascript对象)获取关联的缓存对象。从缓存对象中获取key="test"的值,如果获取失败,那么根据html5规范从元素的data-test属性获取,从元素的data-attributes 解析出值后也会加入expando对应的缓存中。而且更有意思的,从元素的data-attribute属性获取值的时候会自动的处理camel命名和中划线'-'命名转换, 比如$("body").data("javaCoder")能从<body data-java-coder="javacoder.cn"></body>属性中获取值

当我们通过$("body").data("test", "javacoder.cn")设置值时,也是通过dataUser 的expando属性从$("body")[0](原生的javascript对象)获取关联的缓存对象,将{"test":"javacoder.cn"}合并到缓存对象中
假设expondo=jQuery321027482634522923722
$("body")[0] 元素会多如下属性
jQuery321027482634522923722:{
"test":"javacoder.cn" }

这个设计有点类似java的ThreadLocal的感觉

Posted in: WEB开发

Comments are closed.