日期:2014-05-16  浏览次数:20362 次

Jquery你不知道的事。
昨天在做一个数组的深度克隆,具体是什么就不描述了。只是当时给Object对象加了一个方法,如下。
如果在你的页面引入了jquery库时。
 
JScript code

 <script src="../Scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
       Object.prototype.tag = "Object根对象";
       
        function loads() {

            var values = $("#stimes option:selected").text(); //获取SELECT选中的值。
            alert(values);
        }
</script>


问题就出在这里,当引入了jquery库,然后再为Object添加一个属性,或者任意的方法时。Jquery将有很多方法不能运行了。
去掉上面的Object.prototype.tag = "Object根对象";代码运行正常,能弹出8.如果加上它,则提示报错。不支持属性或方法。  
  解决的方案,将Object要增加的属性和方法写在引用jquery库之前。
 
JScript code

<script type="text/javascript">
       Object.prototype.tag = "Object根对象";
       
        function loads() {

            var values = $("#stimes option:selected").text(); //获取SELECT选中的值。
            alert(values);
        }
</script>
 <script src="../Scripts/jquery.js" type="text/javascript"></script>



HTML code

 <select id="stimes">
                         <option selected="selected">8</option>
                         <option>9</option>
                         <option>10</option>
                         <option>11</option>
                         <option>12</option>
                         <option>13</option>
                         <option>14</option>
                         <option>15</option>
                         <option>16</option>
                         <option>17</option>
                         <option>18</option>
                         <option>19</option>
                         <option>20</option>
                         <option>21</option>
                         <option>22</option>
                         <option>23</option>
                        </select>时



------解决方案--------------------
你的原贴我已经补充说明了:不要在使用jQuery等各种框架库的情况下扩充原型对象,并且给出了替代解决方案,补充了delete用法。
------解决方案--------------------
你是不是用了其他js呢?因为很多都重写了Object,所以当然任意一方让步就可以了。

1.调整js加载先后顺序的
2.delete(Object.prototype.xxx);