1. 创建和修改属性

    1. 创建对象

      1. const myObject = {};    //字面量表示法
        const myObject = new Object(); //Object() 构造函数
    2. 修改属性 ---- 对象中的数据是可变的

    3. 添加属性

      1. const printer = {};
        //添加属性
        printer.on = true;
        printer.mode = "black and white";
        printer['remainingSheetes'] = 168;
        printer.print = function () {
        console.log('The printer is printing!');
        };
    4. 移除属性

    5. delete printer.mode;
    6. 传递参数

      1. 传递原始类型 primitive type

        • 原始类型(字符串、数字、布尔值、Null、Undefined)是不可变的。函数中的参数(所以不会有作用域覆盖)所作的任何修改都不会影响该函数外部的原始类型,而是为该函数创建一个局部副本

        • function changeToEight(n) {
          n = 8; // 无论 n 是什么,它此刻都是 8... 但仅仅是在这个函数中!
          } let n = 7; changeToEight(n); console.log(n); // 7
      2. 传递对象

        1. 对象是可变的。如果向函数传递一个对象,会传递一个引用给该对象。

          • let originalObject = {
            favoriteColor: 'red'
            }; function setToBlue(object) {
            object.favoriteColor = 'blue';
            } setToBlue(originalObject); originalObject.favoriteColor; //blue
          • JS中的对象是通过引用传递的,因此如果修改引用,就是在修改原始对象本身(C语言中的&引用)
        2. 同样地,将一个对象赋值给新的变量,然后改变副本,结果与上述函数参数相同。

          1. const iceCreamOriginal = {
            Andrew: 3,
            Richard: 15
            }; const iceCreamCopy = iceCreamOriginal; console.log(iceCreamCopy.Richard); //15 iceCreamCopy.Richard = 99; console.log(iceCreamCopy.Richard); //99 console.log(iceCreamOriginal.Richard); //99
    7. 两个对象的比较

      • const parrot = {
        group: 'bird',
        feathers: true,
        chirp: function () {
        console.log('Chirp chirp!');
        }
        }; const pigeon = {
        group: 'bird',
        feathers: true,
        chirp: function () {
        console.log('Chirp chirp!');
        }
        }; console.log(parrot === pigeon); //false const myBird = parrot;
        console.log(myBird === parrot); //true
        console.log(myBird === pigeon); //false
      • 只有在将同一个对象的两个引用进行比较时,才会返回true
  2. 调用对象方法

    1. 调用方法

      • const developer = {
        name: 'Andrew',
        sayHello: function () {
        console.log('Hi there!');
        }
        }; developer.sayHello();
        developer['sayHello']();
      • 数组调用
      1. const myArray = [function alerter() {alter('Hello!'); } ];
        //调用alerter()函数
        myArray[0]();
    2. 访问自身属性

      1. this

        • const triangle = {
          type: 'scalene',
          identify: function () {
          console.log(`This is a ${this.type} triangle.`);
          }
          }; triangle.identify();
          // 'This is a scalene triangle.'
        • 当identify( )方法被调用时,this的值会被设置为调用它的对象.
    3. 定义方法

      1. 定义对象 --- 构造函数

        • function Car(make, model, year) {
          this.make = make;
          this.model = model;
          this.year = year;
          } var myCar = new Car("Mazda", "Miata", 1990);
        • 为对象类型创建一个函数以声明类型的名称、属性和方法;再用new创建对象实例
      2. 定义方法

        1. 还可以这样定义方法

          1. function displayCar() {
            var result = `A Beautiful ${this.year} ${this.make} ${this.model}`;
            pretty_print(result);
            } function Car(make, model, year, owner) {
            this.make = make;
            this.model = model;
            this.year = year;
            this.displayCar = displayCar; //这样
            }
    4. 注意全局变量

      1. this和调用--- 函数如何调用决定了函数内的this值

        • chameleon对象 由于 .lookAround() 作为一个方法被调用,因此.lookAround()中的this的值就是调用时位于点左侧的部分

          1. const chameleon = {
            eyes: 2,
            lookAround: function () {
            console.log(`I see you with my ${this.eyes} eyes!`); //用this检索属性
            }
            }; chameleon.lookAround();
        • 全局window对象

          • const car = {
            numberOfDoors: 4,
            drive: function () {
            console.log(`Get in one of the ${this.numberOfDoors} doors, and let's go!`);
            }
            }; const letsRoll = car.drive; letsRoll();
          • 当一个常规函数被调用时,this的值就是全局window对象

          • 虽然 car.drive 是一个方法,但我们还是将该函数存储在一个变量 letsRoll 中。由于 letsRoll() 是作为一个常规函数调用的,因此 this 将指向它内部的 window 对象。

      2. window对象

        1. window对象由浏览器环境提供

          1. window作为全局变量,代表了脚本正在运行的窗口暴露给JavaScript代码

          2. 在有标签页功能的浏览器中,每个标签都拥有自己的window对象,同一个窗口的标签页之间不会共享一个window对象

        2. 全局变量是window上的属性

          1. window对象处于最高(全局)级别,每个在全局级别进行的变量声明会自动成为window对象上的一个属性

          2. window.currentlyEating === currentlyEating // true
        3. 全局变量和var、let、及const

          1. 只有使用 var 声明的变量才会将其添加到window对象中,let、const在函数外部声明的变量,不会被作为属性添加到window对象。

            1. let eating ='rice';
              window.eating === eating //false
        4. 全局函数是window上的方法

          1. function learnSomethingNew() {
            window.open('https://www.udacity.com/');
            } window.learnSomethingNew === learnSomethingNew // true
        5. 避免全局变量

          1. 紧密耦合

            • 紧密耦合是开发者用来表示代码过于依赖彼此细节。更改一段代码会无意中改变其他代码的功能
          2. 名称冲突

            1. 当两个(或多个)函数依赖于具有相同名称的变量时,则会发生名称冲突。

            2. 两个函数都会尝试更新或设置变量,但是这些更改将被相互覆盖。

  3. 提取属性和值

    1. Object.keys()和Object.values()

      1. const dictionary = {
        car: 'automobile',
        apple: 'healthy snack',
        cat: 'cute furry animal',
        dog: 'best friend'
        }; console.log(Object.keys(dictionary)); // ['car', 'apple', 'cat', 'dog']
        console.log(Object.values(dictionary)); // ['automobile', 'healthy snack', 'cute furry animal', 'best friend']

object in depth的更多相关文章

  1. node.js global object,util and so on

    核心模块主要内容: 全局对象 常用工具 事件机制 文件系统访问 http服务器和客户端 global object: 所有的全局变量(除了global本身外)都是global object 的属性(a ...

  2. Node.js 基础库

    全局对象 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global对象的属性. 我们在 Node.js 中能够直接访问到对象通常都是 global ...

  3. NODE.JS开发指南学习笔记2

    1.核心模块 核心模块是Node.js的心脏,由一些精简高效的库组成,为其提供了基本的API.2.全局对象 global.所有的的全局变量都是其属性.其根本的作用是作为全局变量的宿主.3.全局变量 1 ...

  4. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  5. nodejs随记01

    EventEmitter var stream = require('stream'); var Readable = stream.Readable; //写入类(http-req就是),初始化时会 ...

  6. Node.js 手册查询-1-核心模块方法

    Node.js 学习手册 标签(空格分隔): node.js 模块 核心模块 核心模块是被编译成二进制代码,引用的时候只需require表示符即可 os 系统基本信息 os模块可提供操作系统的一些基本 ...

  7. Node.js 常用工具 util

    util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor ...

  8. 鸟瞰Nodejs

    一,基础. 1,Node的包管理器:npm; 安装node环境时会自动安装. 本地模式获取一个包:npm install [package_name] 此时包被安装到当前木的node_modules子 ...

  9. ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)

    客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...

随机推荐

  1. 机器学习-线性回归补充-R^

    线性回归算法在选自变量会遇到两个问题:一是去掉多重共线性干扰,二是选择最优自变量组合. 线性回归步骤 1.选择自变量 注意点 去掉多重共线性干扰,选择最优自变量组合.这里需要理解决定系数:R^.它是理 ...

  2. python正则表达式 re (二)escape

    背景: 在使用python的过程中,你肯定对转义字符的使用苦恼过,因为有的时候我们需要使用一些特殊符号如”$ * . ^”等的原意,有时候需要被转义后的功能,并且转义字符地使用很繁琐,容易出错,那拯救 ...

  3. Sass--混合宏--声明宏

    如果你的整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的.但当你的样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到我们目了.这 ...

  4. ZYNQ的Linux Linaro系统镜像制作SD卡启动(仅使用mkfs部分,其他部分待看)

    0. 概述 ZYNQ生成uboot的时候和正常的ARM设备不太一样,ZYNQ属于二次辅助启动uboot然后由uboot启动内核,大概意思就是 ZYNQ内部有一个机制,该机制不可修改,可以通过拨码开关控 ...

  5. TCP协议的简单应用一

    TCP协议的应用,实现一个服务器处理多个客户端请求(向服务器发送消息,服务器接收到后以原消息返回给客户端.) 客户端类 import java.io.*; import java.net.Socket ...

  6. YOLOv1到YOLOv3的演变过程及每个算法详解

    1,YOLOv1算法的简介 YOLO算法使用深度神经网络进行对象的位置检测以及分类,主要的特点是速度够快,而且准确率也很高,采用直接预测目标对象的边界框的方法,将候选区和对象识别这两个阶段合二为一, ...

  7. iOS系统日历选择问题

    参考:https://blog.csdn.net/lg_sun/article/details/78913064 -(NSString *)getTimeToken{ NSDateFormatter ...

  8. [CF852H]Bob and stages

    题意:给出平面上\(n\)个点,要求选出\(k\)个点,使得这些点形成一个凸包,且凸包内部没有点,求最大面积.无解输出\(0\). 题解:枚举凸包最左的点\(p\),删除所有在\(p\)左边的点,然后 ...

  9. 关于exe文件传递参数方法

    段代码手工折叠 {$REGION 'Designer Managed Code'} ............ {$ENDREGION} 昨天同事问到,delphi里exe文件如何传递参数? 因为手头装 ...

  10. 【SpringBoot】 一种解决接口返回慢的方式

    前言 使用springboot开发后台代码的时候,很核心的一个功能是为前端提供接口,那么很可能你会遇到如下问题: 1. 接口里面调用的service层是第三方库或者第三方后台程序,导致访问很慢. 2. ...