深入浅出javascript(六)对象

时间:2023-03-10 00:20:21
深入浅出javascript(六)对象

2.为什么一切皆对象?

《Javascript权威指南》解释了这个问题,问题的起源在于,如果typeof(字符串)返回的是string,并非object,那么为什么字符串也是对象呢?

简单说,像这类简单数据类型,JS都有一个对应的包装类(wrapper),比如说:

var a="helloworld";

当调用字符串a的方法时,JS就会在内部创建一个String包装对象,这种对象引用完之后就会瞬间消失,而且不会改变原字符串的内容。

理解这个,我们就可以通守new显式的创建一个字符串对象,此时是对象,而不是string数据类型了。

var s=new String("hello world");

  

三、具有对象能力

具有“对象化”的能力,就是可以将数据和代码组织成复杂结构的能力,在JS中,只有object类型和function类型提供了对象化的能力。

1.建立对象的方法。

参考另一篇日志:http://www.cnblogs.com/tinaluo/p/6667639.html;

2.关于对象的说明:

在JS中,对象的属性方法可以任意添加。

1.object类型。

var apple={};          //定义一个苹果空对象,什么都没有,为空;
apple.color="red"; //添加属性color;
apple.price=20.5; //添加属性price;
apple.show=function show(){ //添加方法show(),在这里show成了一个变量;function类型的变量;
alert(apple.price);
};
apple.show(); //调用对象的方法show();

2.函数类型属性的添加

function show() //定义一个函数;
{
alert(show.color+show.price);
}
show.color="red"; //添加color属性;
show.price=20.5; //添加price属性; show(); //调用函数

3.遍历一个对象的所有属性

对象在这一点上很像字典,即key->value的样式,可以像下标一样去索引

object和funciton类型内部实现就是一个字典结构。

var apple={};          //定义一个苹果空对象,什么都没有,为空;
apple.color="red"; //添加属性color;
apple.price=20.5; //添加属性price
apple.show=function show(){ //添加方法show(),在这里show成了一个变量;function类型的变量
alert(apple.price);
}; //遍历上面定义的apple对象的所有属性
//对象的属性很像字典key->value的样式;
for(var key in apple)
{
document.write(key+"->"+apple[key]+"<br>");
}

有了这种思路,就可以遍历各种对象的属性,【从结果来看,即使对象的方法,在对象内部也类似于属性了】。

比如说,我们经常用到window对象,就很好奇这个window对象究竟有多少种属性。

for(var key in window) //遍历系统的window对象的所有属性(方法也算为属性之内)
{
document.write(key+"->"+window[key]+"<br>");
}

结果可以看到:

top->[object Window]
location->file:///E:/NotePad/function.html
document->[object HTMLDocument]
window->[object Window]
external->[object Object]
chrome->[object Object]
key->key
speechSynthesis->[object SpeechSynthesis]
caches->[object CacheStorage]
localStorage->[object Storage]
...............