第二章 对象与属性
来源:互联网 发布:天刀明星捏脸数据 编辑:程序博客网 时间:2024/05/23 19:10
2.1 复杂对象可以将大多数JavaScript值作为属性
var myObject = {};myObject.myFunction = function(){};myObject.myArray = [];myObject.myString = "string";myObject.myNumber = 33;myObject.myDate = new Date();myObject.myRegExp = /a/;
2,2 封装复杂对象
//使用对象封装,创建对象链var object1 = { object1_1:{ object1_1_1:{foo:'nar'}, object1_1_2:{}, }, object1_2:{ object1_2_1:{}, object1_2_2:{}, },};console.log(object1.object1_1.object1_1_1.foo);//可以无限制扩展var foo = [{foo:[bar:{say:function(){return 'hi';}}]}];console.log(foo[0].foo[0].bar.say());
2.3 用点表示法或中括号表示法获取/设置/更新对象属性
var liuy = new Object();liuy.living = true;console.log(liuy.living);//Document.write(liuy.living);liuy['living'] = false;console.log(liuy['living']);var foobarObject = {foobar:'Foober is code for no code'};var string1 = "foo";var string2 = "bar";console.log(foobarObject[string1 + string2]); //woo!!!
此外,在属性名称为JavaScript无效标识符的时候,中括号表示法可以派上用场。
var myObject = {'123': 'zero', 'class': 'foo'};
2.4 删除对象属性
delete操作符可以将属性从一个对象中完全删除。
delete liuy.living;
! delete是将属性重对象中删除的唯一方法。将属性设置为undefined或null只能改变属性的值,而不会将属性从对象中删除。
2.5 如何解决对象属性的引用
当试图访问一个对象的属性时,它会检查该属性的对象实例。
如果实例拥有属性,将返回属性的值,而且不会有继承发生,因为没有利用原型链;
如果实例没有属性值,JavaScript会在对象的构造函数,特别是实例构造函数的prototype(原型)属性。
var myArray = [];console.log(myArray.foo);myArray = ['foo','bar'];console.log(myArray.join());console.log(myArray.hasOwnProperty('join'));
再次重申一下,如果你试图访问一个属性,但该对象不包含该属性时,JavaScript将针对这个值搜索原型链。
首先,它将查看创建对象(如Array)的构造函数,并校验器原型(Array.prototype),了解是否可以在这里找到这些属性。如果第一个原型对象没有该属性,那么JavaScript将继续搜索初始构造函数背后(父类)的构造函数链,一直搜索到链的末端(Object)。
2.6 使用 hasOwnProperty 验证对象属性不是来自原型链
var myObject = {foo:'value'};console.log(myObject.hasOwnProperty('foo'));console.log(myObject.hasOwnProperty('toLocalString'));console.log('foo' in myObject);console.log('toString' in myObject);
2.7 使用 in 操作符检查一个对象是否包含给定属性
需要了解的是,in操作符不仅能检查包含在引用的对象的中的属性,而且能够检查对象通过原型链结成的属性。因此,属性查找规则是一样的,并且,如果在当前对象中找不到属性,就会在原型链上进行搜索。
2.8 使用 for in 循环枚举(遍历)对象的属性
! 访问属性的顺序并不总是他们在循环内部被定义的顺序。另外,定义属性的顺序不一定是访问他们的顺序。
使用 for in 循环只能遍历可枚举属性,例如构造函数属性就不会显示,可以使用 propertyIsEnumerable()方法检查哪些属性是可枚举属性。
2.9 宿主对象与原生对象
大家应该利艾姐的是,执行JavaScript的环境(如Web浏览器)通常包含宿主对象。
宿主对象不是ECMAScript实现的一部分,但在执行时可作为对象使用。当然,宿主对象的可用性和行为完全取决于宿主环境提供的内容。
2.10 使用Underscore.js增强及扩展对象
- 第二章 对象与属性
- 第二章 类与对象
- 第二章 类与对象
- 第二章:C#.NET面向对象——面向对象程序设计4(属性与索引器)
- 第二章 用对象思考:属性和方法
- 第二章,对象的创建与使用
- 第二章 Java核心-对象与类
- 第二章 类与对象2
- 第二章 类与对象---拜访对象村
- Js对象与属性
- XMLHttpRequest 对象与属性
- 第二课 类与对象
- 类与对象第二题
- C++编程思想 第二章 对象的创建与使用
- <Head First Java>学习笔记--第二章:类与对象
- The Java Programming Language4th读书笔记-第二章 类与对象
- JAVA Head First 第二章 类与对象
- 第二章 一切都是对象
- Unable to create Debug Bridge: Unable to start adb server: error: could not install *smartsocket* li
- AIDL开发流程
- 各种工具类。让程序员快速开发
- cocos2dx-js web适配(重点在后面)
- mysql排名(查询篇)
- 第二章 对象与属性
- VMware的快照和克隆总结
- 分页功能改善,以form方式提交查询条件,可手动修改每页显示数量
- Android view事件分发总结
- 2016ICPC大连网赛 Weak Pair 线段树&&树状数组
- 计算机网络知识点汇总
- js获取url中get传参以及预览图片等...几个
- RecyclerView item 点击事件设置
- HTML元素坐标定位