毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> WEB开发 >> 正文

return m_elements.push.apply(m_elements, arguments)怎么理解

更新时间:2013-1-18:  来源:毕业论文

return m_elements.push.apply(m_elements, arguments)怎么理解
<html> <head>     <title>Example-21.14 构造继承法</title> </head> <body> <script> <!--     function dwn(s)     {         document.write(s + "<br/>");     }     //定义一个Collection类型     function Collection(size)     {         this.size = function(){return size};  //公有方法,可以被继承     }           Collection.prototype.isEmpty = function(){   //静态方法,不能被继承         return this.size() == 0;     }           //定义一个ArrayList类型,它"继承"Collection类型     function ArrayList()     {         var m_elements = []; //私有成员,不能被继承         m_elements = Array.apply(m_elements, arguments);           //ArrayList类型继承Collection         this.base = Collection;         this.base.call(this, m_elements.length);               this.add = function()         {             return m_elements.push.apply(m_elements, arguments);         }             this.toArray = function()         {             return m_elements;         }     }       ArrayList.prototype.toString = function()     {         return this.toArray().toString();     }     //定义一个SortedList类型,它继承ArrayList类型     function SortedList()     {         //SortedList类型继承ArrayList         this.base = ArrayList;         this.base.apply(this, arguments);           this.sort = function()         {             var arr = this.toArray();             arr.sort.apply(arr, arguments);         }     }   //构造一个ArrayList     var a = new ArrayList(1,2,3);     dwn(a);     dwn(a.size()); //a从Collection继承了size()方法     dwn(a.isEmpty);    //但是a没有继承到isEmpty()方法       //构造一个SortedList     var b = new SortedList(3,1,2);     b.add(4,0);    //b 从ArrayList继承了add()方法     dwn(b.toArray());    //b 从ArrayList继承了toArray()方法     b.sort();        //b 自己实现的sort()方法     dwn(b.toArray());     dwn(b);     dwn(b.size());    //b从Collection继承了size()方法 --> </script> </body> </html>

在ArrayList对象的add方法中
return m_elements.push.apply(m_elements, arguments);
这一句怎么理解呢?
这一句不是等于m_elements.push(arguments);吗,为什么还要写的那么罗嗦,

其实这么罗嗦的写目的在于 把Object当Array使用,举个例子:

你有一个对象person,然后你可以调用[].push.apply(person, ["aa", "bb"])

<script>
var person = {};
[].push.apply(person, ["aa"]);
alert(person[0]);
</script>

就会弹出 aa,其实作用的对象是person,但是IE不支持这个写法,firefox和chrome支持

补充一下,IE要想支持这个写法,需要在调用push.apply之前,调用下person.length = 0;,才可以把对象当做数组使用

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。