第二章 对象与属性

    xiaoxiao2022-06-29  43

    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增强及扩展对象

    转载请注明原文地址: https://ju.6miu.com/read-1125445.html

    最新回复(0)