if ( elem.nodeType ) {
cache[ id ] = dataObject;
elem[ expando ] = id;
} else {
elem[ expando ] = dataObject;
}
// ...
但是,一旦涉及到继承问题,该方法就无能为力。试看:
var parent = {};
var childA = Object.create( parent );
var childB = Object.create( parent );
$.data( parent, "foo", "parent value" );
// This may even be intentional
$.data( childA, "foo" )
// = "parent value"
$.data( childB, "foo" )
// = "parent value"
// This may NOT be intentional
$.data( childA, "foo", "childA value" );
$.data( parent, "foo" )
// = "childA value"
$.data( childB, "foo" )
// = "childA value"
开始时,存储数据的对象不存在,因此创建一个对象来存储新的值,如图
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)现在,我们尝试去修改对象childA同样的数据。
对象childA并不存在该数据,因此它沿着原型链向上查找,父对象刚好拥有该数据,其值立即被改写。所以,从parent和childB这两个对象获取foo的值,得到的将是childA value,而不是parent value。
猜你喜欢