学习面向对象的JavaScript
以下是我对《精通JavaScript》学习的记录,理解有误之处敬请指正。
“引用”是一个指向对象实际位置的指针。多个变量可以同时指向同一个对象。对象的修改会直接影响到引用对象的变量。JavaScript里的结果是沿着引用链一直上溯到原来那个对象。请看下面的示例。
<script type="text/javascript">
var items = new Array('one', 'two', 'three');
var itemsRef = items;
var itemsRef1 = itemsRef;
items.push('four'); // 修改items数组
document.write('itemsRef1 = ' + itemsRef1 + '<br />');
// one,two,three,four
itemsRef1.push('five'); // 对itmesRef的修改可以直接影响items和itemsRef
document.write('items = ' + items + '<br />');
// one,two,three,four,five
items = ''; // 重新构建items对象,并没有对itemsRef及itemsRef1构成影响
document.write('itmes = ' + items + '<br />');
// items返回空
document.write('itemsRef = ' + itemsRef + '<br />');
</script>
JavaScript里的垃圾回收机制可能是每创建一个引用就增加一个引用计数器,当引用计数器的值为零的时候就释放这个对象的内存。通过上面的示例可以发现items在重新构建的时候并没有影响到其他的引用,也就是说itemsRef及itemsRef1引用的旧对象并没有被销毁。
JavaScript里的对象类型可以通过typeof和对象的constructor属性。typeof返回对象的类型,不过仅仅用它来判断是不够的,有时候还要检测对象的constructor属性,它返回对象的构造函数。如果不能确定对象类型,可以通过检测对象特有的某些方法来检测是否是指定的类型。
现在还没有评论