您的位置:首页 > 移动开发 > Objective-C

JavaScript Object类型 小抄

2015-10-24 21:06 295 查看
Object类型是非常重要的数据类型,我们看到的大多数的引用类型其实都是Object类型的实例,如Array,Math,Date等;Object也是ECMAScript中使用最多的一个类型。

在应用程序中存储和传输数据,是非常理想的选择。

对象中的数据有两种形式,属性和方法。对象的实例就是一些彼此相关的属性和方法的集合在一起构成的数据实体。

创建方法:

一、new操作符跟Object构造函数。

var person = new Object();   //var person = {};和new Object()相同
person.name = "alia";
person.age  = 20;


二、字面量表示法
var person = {
"name" : "alia",
"age" : 20 //若在这里添加逗号,IE7和Opera会报错
};  //属性值会自动转化成字符串

可以简化创建包含大量属性对象的过程,对象字面量是函数传递大量可选参数的首选方式。

其中数字的属性名会自动转换成为字符串。

一般来说,访问对象属性的时候都是以点的形式访问,JavaScript也可以用方括号来表示访问对象的属性。

从功能上看,两种方法没有什么区别,但是方括号的主要优点是可以通过变量来访问属性。
var thisName = "name";
alert(person[thisName]);

内建对象,JavaScript提供一系列预先定义好的对象,可以将对象直接用在脚本中,这种称为内建对象。 想 Array\Math\Date对象。

在编写JavaScript脚本时,内建对象可以帮助我们快速,简单的完成许多任务。

宿主对象,指用web浏览器所提供的预定义对象,主要包括 Form, Element ,和Image我们可以通过这些对象获取给定网页上这些元素的信息。

对象是属性的容器,每个属性都有名字和值。 对属性的名字和值没有限制,对象很适合于汇集和管理数据。 所以很容易能表示成树状或者图形结构。

更新:

对象里的值可以通过赋值语句来更新,如果属性已经存在,属性的值会被替换, 如果之前没有该属性,则属性将被扩充到对象中。 不会出现属性不存在的情况,这里和其它的编程语言不一样。

引用:

对象通过引用来传递,它们永远不会被复制。
var x = stooge;
x.nickname = "lcuk";
var thename = stooge.nickname;   // thename = "luck" x和stooge指向同一个引用,所以stooge.nickname是"luck"证明对象没有被复制。

原型:

每个对象都链接到一个原型对象,并且可以从它中继承属性。 所有通过对象字面量创建的对象都连接到Object.prototype 它是js中的标配对象。

当创建一个对象的时候可以选择某个对象作为它的原型。 js提供了这种机制,但是比较复杂和杂乱,可以明显的简化,给Object增加一个create方法。

创建一个使用原对象作为原型对象的新对象,在学习下一章的时候补上。

当我们对某个对象做出改变的时候,不会触及到该对象的原型。

原型链只有在检索值的时候才会被用到。如果我们尝试去获得对象的某个属性值该对象没有该属性名那么JavaScript会从该对象的原型对象中尝试获取该值,如果该原型对象中没有,那么将再从它的原型中找,该过程最终达到Object.prototype,如果属性不存在原型链中,那就是undefined值。

原型关系是一种可见关系,当我们在原型中添加一个新的属性的时候,该属性会立即对基于该原型创建的所有对象可见。

后续会接触到更多原型链的内容。

反射

为什么这一小节叫反射,难道检查对象有什么属性这样的过程就叫做反射?  检查对象的属性值,检索属性并验证所取得的值, typeof操作符就可以很好的做到确定属性的类型。
typeof flight.number   //'number'
typeof flight.status  //'string'


y原型链中的任何属性都会产生值,
typeof flight.toString  //'function'


处理掉不需要的属性,一种方法可以做检查,然后去掉不需要的值为函数的属性;

另外一种方法是用hasOwnProperty方法,如果是对象独有的属性,将会返回true,否则返回false.  hasOwnProperty不会检查原型链。

枚举

用 for in 可以遍历一个对象中所有的属性名,该过程会列出来所有的属性,包括函数,函数本来就属于属性,和你不关心的原型中的属性,所以需要去过滤掉不需要的值,最常用的方法是用hasOwProperty和typeof来检查。
var name;
for(name in flight){
if(typeof(flight[nmae]) !== 'function'){
document.writeln(name + ':' +  flight[name]);
}
}


但是用for in的方法,属性名出现的顺序不是一定的,因此需要对所有出现的属性顺序做准备。 确保属性以特定的顺序出现,最好的办法是创建一个数组,在其中以正确的顺序包含属性:
var i;
var properties = [
'first-name',
'middle-name',
'last-name',
'profession'
];
for(i = 0; i < properties.length; i++){
document.writeln(properties[i]+ ":" + flight[peoperties[i]]);
}
通过数组可以获取到我们需要的属性,而不用担心可能发掘出原型链中的属性,并且我们按正确的顺序获取到了想要的值。

删除

delete运算符可以用来删除对象的属性,如果该对象有该属性,那么该属性就会被删除。

delete flight.number;

删除对象的属性可能会使原型中链的该属性暴露出来。

减少全局变量污染

JavaScript可以很随意的定义全局变量来容纳你应用的所有资源,

遗憾的是全局变量削弱了程序的灵活性,应该避免使用。

最小化使用全局变量的方法就是你的程序只使用唯一的一个全局变量。

var myapp = {};

该全局变量变成了应用的容器,将全局性的资源都容纳在一个名称的空间中,你的程序和其它的应用程序、组件或者类库之间发生冲突的可能性会明显的降低,程序也会变得很容易阅读。

还有一种减少全局变量污染的方法就是闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: