您的位置:时时彩走势图 > 重庆时时五星彩走势图-服务器运维 > 复制代码 代码如下

复制代码 代码如下

2019-12-25 10:10

举例说:有三个employee对象, 复制代码 代码如下: function employee(卡塔尔(英语:State of Qatar){ this.e_id = 0; this.e_name = ""; } 以后急需为它动态的新添"age"属性和"toString(卡塔尔"方法, 复制代码 代码如下: var empObj = new employee(卡塔尔(英语:State of Qatar); empObj["age"] = 20; empObj["toString"] = function() { return this.e_id.toString() + this.e_name; }; 风流浪漫行轻便的代码就负责了那项专门的学问,那是Javascript内置扶植的,不过一再大家需求在这里基本功上支撑一定水平的恢弘,所以会将那风流洒脱行简单的代码分红一个艺术: 复制代码 代码如下: function dym_setprop { if { obj[key] = value; } } 看见这里,大家先让思绪做个跳转,跳到C#中的employee对象,如下: 在面向对象的编制程序中,对外使用的都是性质,那么动脑怎么将这种办法签入到Javascript中,现在让我们跳回dym_setprop函数内,既在dym_setprop方法中不能够应用obj[key]=value的直白赋值方式,而要帮衬Set。 复制代码 代码如下: function dym_setprop { if { fn; } } 参数fn,在dym_setprop中不间接操作任何对象,使用函数fn来顶替相应的操作代码,则在那处除了补助Set外,还应该有别的超大的即兴空间。 让我们后续浓重dym_setprop方法,未来大家把关切点放在参数value上,大家都通晓value能够是值类型,也能够是函数,对于值类型来讲,不用思量其余东西直接赋值就足以了,对于函数来讲就向来比不上此轻松,它协助三种操作: 1、直接将函数赋给新扩充的属性 2、将函数实施的回到值赋给新扩充的质量复制代码 代码如下: function dym_setprop(obj, key, value, fn, exec, pass卡塔尔(英语:State of Qatar) { if { var temp = value; if { temp = value.call(obj, key, fn; } fn; } } 在这里段代码中参数exec当作了上面二种操作选拔的剧中人物,参数pass是叁个额外的实践参数。除外,大家兴许会对fn有个别纳闷,因为地点有七个地方选择了,不一样只有参数个数不一致,fn到底代表如何?!再度想下C#中的属性,它是有Get/Set的,那么在这地fn就一定与Get,而fn就十一分与Set。 譬如:看下边包车型地铁代码,对于fn的概念与行使, 复制代码 代码如下: employee.AccessProp = function { if { obj[key] = value; } else { return obj[key]; } } dym_setprop(empObj, "age", function { return value + 10; }, employee.AccessProp, true卡塔尔; 看了这么多,或者大家以为郁闷,轻便的动态扩充对象程序为何要以这种方式来编排,有种天下本无事的认为,其实不然,要是你只想做动态扩展对象,那么作者建议您别选用上述dym_setprop的笔触,不过假使你想从特别空虚的角度上构思,将dym_setprop内的次序当做三个流程实行的沙盘模拟经营,那么那是多个不利的点子,因为dym_setprop内部不辜负权利何具体代码(obj[key]=value或obj[key]卡塔尔的执行,它都因此函数fn来代表,那样对于现实试行来讲有完全自由的长空。 领会完上述的思绪后,让大家进去本文的为主,JQuery是怎么着完成动态扩充对象的?access函数, 复制代码 代码如下:function access( elems, key, value, exec, fn, pass 卡塔尔(英语:State of Qatar) { var length = elems.length; // Setting many attributes if ( typeof key === "object" 卡塔尔 { for { access( elems, k, key[k], exec, fn, value ); } return elems; } // Setting one attribute if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = !pass && exec && jQuery.isFunction; for ( var i = 0; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn : value, pass 卡塔尔(英语:State of Qatar); } return elems; } // Getting an attribute return length ? fn : null; } 留神看完access函数的代码,你早晚开采它和dym_setprop的相试度相当的高,它只是多了生龙活虎段代码: 复制代码 代码如下: if ( typeof key === "object" 卡塔尔(قطر‎ { for { access( elems, k, key[k], exec, fn, value 卡塔尔(英语:State of Qatar); } return elems; } 超轻松看见它实际上便是用来支撑object对象的动态扩充属性。具体的施行流程经过下图来呈现: 到此处朝气蓬勃度写完了,本文试着从友好的角度上来估摸JQuery的开荒者是怎么统筹出access函数的,让它去支撑动态扩大对象,何况证实了access的施行流程。其实对于本人的这种猜想不必然科学,但是不要紧碍作者对于JQuery的钻研。

本文由时时彩走势图发布于重庆时时五星彩走势图-服务器运维,转载请注明出处:复制代码 代码如下

关键词: