• 从JS库的使用者转变成JS的开发者——第二篇 使用对象和属性


    第二篇  使用对象和属性

    用点记法或括号法获取/设置/更新对象的属性

    点记法相对括号法更常用一些,但是有时候只能用括号法,点记法用不了。

    如:1.如果你想操作的对象属性名被储存在一个变量内。

    var foobarObject = {foobar: 'Foobar is code for no code'};

    var string1 = 'foo';

    var string2 = 'bar';

    console.log(foobarObject[string1 + string2]);

    2.属性名是无效标识符时。

    var myObject = {'123':'zero','class':'foo'};

    // Let's see dot notation do this! Keep in mind 'class' is a keyword in JavaScript

    console.log(myObject['123'], myObject['class']); // logs 'zero foo'

    删除对象属性

    delete 操作是唯一可以彻底删除对象的某一属性。

    var foo = {bar: 'bar'};

    delete foo.bar;

    console.log('bar' in foo); // logs false, because bar was deleted from foo

    注: delete操作不可以删除在prototype链中的属性。

    对象属性的引用方法

    如果你想获取一个对象属性,而这个对象并不包含这个属性,那么js会在prototype链中去找这个属性。首先它会先查找创建这个对象的构造函数,检查它的prototype,看是否存在。如果还找不到,就会继续沿着prototype链查找构建这个构造函数的构造函数,直到找到该属性或链的尽头。

    因为所有prototype属性都是对象,链的尽头是Object.prototype.

    hasOwnProperty 判别一个对象属性是否从prototype链继承

    hasOwnProperty 只查找对象本身的属性,不查找prototype链。

    in 操作判断对象是否存在某属性

    in 操作不仅查找对象本身,还会查找prototype链。

    列举对象属性

    用for in 可以列举对象的属性。

    var cody = {

    age : 23,

    gender : 'male'

    };

    for (var key in cody) { // key is a variable used to represent each property name

    // avoid properties inherited from the prototype chain

    if(cody.hasOwnProperty(key)) {

    console.log(key); }

    }

    注:1. for in 返回的不仅是对象的属性,还会包含从pprototype链继承的属性。如果想单纯获取对象属性,则必须用hasOwnProperty方法。

    2.获取的属性的顺序并不一定和定义时的顺序一致。

    3.只返回可枚举的属性,可以用propertyIsEnumberable()判断属性是可枚举的。

    宿主对象(Host Objects)与原生对象(Native Objects)

    执行js脚本的环境(如浏览器)本身包含的对象叫宿主对象。宿主对象并不属于脚本语言的一部分,但是在执行时可以被调用。宿主对象的属性和方法完全取决于环境。

    在浏览器中,window/head 以及它们包含的对象(除了js提供的对象)都是宿主对象。最常见的宿主对象还有操作DOM的接口window.document.

    执行js的环境会提供保存js原生对象的宿主对象。

  • 相关阅读:
    min-width和width的区别
    组装电脑
    css背景透明,文字不透明
    三十九、前端基础之HTML
    三十八、事务、mysql索引,视图
    三十七、python操作mysql,和navicat
    三十六、单表与多表查询
    三十五、表与表之间的关系
    三十四、字段类型
    三十三、初识数据库及简单命令
  • 原文地址:https://www.cnblogs.com/liubingna/p/2980370.html
Copyright © 2020-2023  润新知