学习笔记7-对象

对象

对象,一种容器(聚合或复杂数据类型)

对象属性枚举

属性的顺序是无序的

  1. for……in
    const obj = { a: 1, b: 2, c: 3 };
    for (let p in obj) {
        if (!obj.hasOwnProperty(p)) continue;
        console.log(`${p}:${obj[p]}`);
    }

for……in循环不会枚举符号类属性

  1. Object.keys
    Object对象提供的一种枚举字符串属性的方法,并返回一个数组
    const obj = { a: 1, b: 2, c: 3 };
    Object.keys(obj).forEach(p => console.log(`${p}:${obj[p]}`));

Object.keys也不会枚举符号类属性

类的创建和实例化

    class Shape {
        constructor(...props) {

        }
    }

    let shape = new Shape();

JavaScript类中没有访问权限的限制
类即是函数,类只不过是ES6中提供的一个语法,实际类还是函数
类中使用this,this指的是引用方法被调用时所绑定的实例

    class ES6Class {}
    function ES5Class() {}
    console.log(typeof ES6Class); //function
    console.log(typeof ES5Class); //function

原型

  • 每个函数都有一个prototype属性
  • 使用new创建实例时,会将原型对象存储到自己的proto属性中

原型的动态调度

当试图访问对象的某个属性或方法是,如果它不存在于当前对象中,JavaScript会检查它是否存在于对象原型中。

    class Shape {
        constructor(...props) {

        }

        area() {
            console.log('area function');
        }
    }

    const shape = new Shape();
    console.log(shape.area === Shape.prototype.area); // true
    shape.area(); //调用的是原型中area方法

    shape.area = () => console.log('my area');
    shape.area(); //调用的是我们新赋值的area方法

静态方法

静态方法不于实例绑定,它和类相关联

    class Shape {
        static showInfo() {
            console.log('this is Shape class');
        }
    }

    Shape.showInfo();

继承

    class Shape {

    }

    class Rectangle extends Shape {
        constructor() {
            super();
        }
    }

extends关键字,表示Rectangle继承自Shape
super函数,父类的构造器,子类的构造函数必须调用这个方法

原型链

如果一个方法没有在对象原型中找到其定义,它就会检查原型的原型,这样就形成了一个原型链;JavaScript会沿着原型链一直找下去,如果没有找到,最终程序会报错。

多态

多态,一个实例不仅是它自身类的实例,也可以被当做它的任何父类的实例来使用.
JavaScript中所有对象都是Object的实例。

你可能感兴趣的:(学习笔记7-对象)