7.Data相关,数据管理

简介:

$().data,用于在jQuery实例对象中存储对象数据。

通过$().data存储、获取数据。

代码大体框架:

var data_user, data_priv, rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
rmultiDash = /([A-Z])/g;

function Data() {
}

Data.uid = 1;

Data.accepts = function(owner) {
}

Data.prototype = {
	key: function(){
	},
	set: function(){
	},
	get: function(){
	},
	access: function(){
	},
	remove: function(){
	},
	hasData: function(){
	},
	discard: function(){
	},
}

data_user = new Data();
data_priv = new Data();

jQuery.extend({
	acceptData:  Data.accepts,
	hasData: function(){
	},
	data: function(){
	},
	removeData: function(){
	},
	_data: function(){
	},
	_removeData: function(){
	},
});

jQuery.fn.extend({
	data: function(){
	},
	removeData: function(){
	}
});

function dataAttr(elem, key, data) {
}

jQuery,data相关功能的代码组成大致如上。

代码解析:

变量:

var data_user, data_priv, rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,rmultiDash = /([A-Z])/g;

先是创建了四个变量,其中data_user是面向用户的数据存储对象;data_priv是内部的数据存储对象;rbrace是正则,用于匹配大括号内或中括号内有任意多的任意字符的字符串;rmultiDash是一个正则,用于匹配单个A到Z的字符。

function Data():

function Data() {
    Object.defineProperty(this.cache = {},
    0, {
        get: function() {
            return {};
        }
    });
    this.expando = jQuery.expando + Math.random();
}

创建Data的构造函数,内部this.cache = {},这个空对象。

使用Object.defineProperty,使得this.cache[0]只能被获取得到{},不能被赋值。

this.expando = jQuery.expando + Math.random(),jQuery.expando是一个属于jQuery对象的标识。这里相当于给Data创建一个标识。

Data.uid = 1;

用于表示添加了数据的节点的标识。

 Data.accepts:

Data.accepts = function(owner) {
    return owner.nodeType ? owner.nodeType === 1 || owner.nodeType === 9 : true;
};

一个函数,属于一个参数,如果参数有属性nodeType的话,判断这个参数是不是节点(document或者普通的dom节点),是的话返回true;没有属性nodeType 的话,直接返回true(这是被是视作是普通对象object)。(感觉这个不是很严谨,而且最新的3.5.1版本也已经改成了新的判断方式 owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType) )。

Data.prototype:

Data构造函数的原型。

  • key:

key: function(owner) {
	if (!Data.accepts(owner)) {
		return 0;
	}
	var descriptor = {},
	unlock = owner[this.expando];
	if (!unlock) {
		unlock = Data.uid++;
		try {
			descriptor[this.expando] = {
				value: unlock
			};
			Object.defineProperties(owner, descript
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值