alert(alist.length)调用的是length的toString()方法.lz不是已经定义了吗?
length是个对象,当然调用它的toString()方法了。
length是个对象,当然调用它的toString()方法了。
解决方案 »
- js 验证文本框中是否包含大写英文字母和数字...
- jQuery生成html代码无法使用
- js window.open webbrowser 系统已经计划关机
- 如何利用javascript 动态生成一个 select 下拉框
- 如何获得下一个元素?
- 我在页面里插入一段JAVASCRIPT代码后,在同一页面的一个JS文件里的程序不能正常运行!
- 高手们来帮忙解决一下跨域访问问题?
- React中ExtractTextPlugin和react-loadable是否有冲突?
- 如果让图片从左向右滚动
- 请教,如何获取图中字符串里的对象内容
- 搜索引擎 firefox不兼容问题 IE下很好使????????????
- CheckBox选中时如何切换不同的页面内容?
那alert(alist.length);调用的又是什么方法呢?掉用的是
this.length={
valueOf:function (){
return m_elements.length;
},
toString: function(){
return m_elements.length;
}
}
length 的 toString方法
<script>
function list(){
var m_elements=[];
m_elements = Array.apply(m_elements,arguments);
this.length={
valueOf:function (){
alert('valueOf');
return m_elements.length;
},
toString: function(){
return m_elements.length;
}
}
this.toString=function(){
return m_elements.toString();
}
this.add=function(){
m_elements.push.apply(m_elements,arguments);
alert('add');
}
}
var alist=new list(1,2,3);
alert(alist);
alert(alist.length);
alist.add(4,5,6);
alert(alist);
alert(alist.length);
</script>
</html>
alert('add');是打出来了1次,说明alert(alist);只调用了toString()方法,为什么?
alert('valueOf');没打出来,为什么valueOf()方法不调用?
谁能说说原理,谢谢