你知道万物,但你知道万物皆对象吗?

标题你知道万物,但你知道万物皆对象吗?

      ● 面向对象编程(Object Oriented Programming,缩写为OOP)是目前主流的编程范式。它的核心思想是将真实世界中各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟

基本特点是:封装,继承,多态
● 封装:封装的过程就是把一些属性和方法放到对象中“包裹”起来
● 继承:继承,简单的说就是可以从父级那里获取到共有的属性和方法
● 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,由于弱类型的特点,JS自带多态,或者说不需要这个概念

基本概念:  万物皆对象 任何一个对象都是原型和原型连接形成链式结构,这种链式结构叫做原型链,原型链的顶端都是Object的原型,原型链通过__proto__连接,以下是div元素的原型链
HTMLDivElement --> HTMLElement --> Element --> Node --> EventTarget --> Object

对象有两种属性,一种是自身的对象属性,另一种是自身原型的对象属性,自身的对象属性简称对象属性,自身原型的对象属性简称为原型属性,绑定在Object原型上的方法和属性会被所有的对象共享和使用.

Object.defineProperty(o, ‘name’, {
    value: ‘value’,
    configurable: false,    // 不可删除
    writable: true,         // 可写
    enumerable: true        // 可枚举
});

需记住的四个重点   :  1,合并var obj2 = Object.assign({}, obj);
                  2,  Object.keys(obj) 将可枚举的属性组成数组并返回
                   3,Object.values(obj) 将可枚举的属性的值组成数组并返回
                   4,hasOwnProperty判断属性是否为对象的对象属性而不是原型属性
                
闭包:用处:
a. 定义:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行就产生了闭包.闭包是一个环境,具体指的就是外部函数–高阶函数。说白了就是一个环境,能够读取其他函数内部的变量。本质上,闭包是将函数内部和函数外部连接起来的桥梁
● 用处:
a. 读取函数内部的变量
b. 这些变量的值始终保持在内存中,不会在外层函数调用后被自动清除
● 优点:
a. 变量长期驻扎在内存中
b. 避免全局变量的污染
c. 私有成员的存在
● 特性:
a. 函数套函数
b. 内部函数可以直接使用外部函数的局部变量或参数
c. 变量或参数不会被垃圾回收机制GC回收

this的四种指向
   1,普通函数和回调函数的this指向window
     2,构造函数中的this指向构造函数实例
     3,对象中的this指向的是函数所在的对象本身,事件函数中this都指向事件所绑定的事件源
      4,箭头函数会修改函数内部this的指向,内部的this指向函数外部this的指向

所谓构造函数,就是提供一个生成对象的模板,并描述对象的基本结构的函数:
              类(构造函数)是对象(实例)的抽象化,对象(实例)是类(构造函数)的具象化、实例化
        console.log(p.proto === Person.prototype);      // true

function Person() {
    this.say = function () {
        console.log(‘实例方法’);
    }   //在外书写就是静态方法
}

Person.prototype.say = function () {
    console.log(‘原型方法’);
}

Array.prototype.max = function () {
    return Math.max(…this);
}

Array.prototype.min = function () {
    return Math.min(…this);
}

第一关键字: constructor
构造器函数,构造方法,一个对象实例的构造器函数指向的是创建这个对象的构造函数

第二关键字: instanceof
判断实例对象是否来自于某个构造函数(包含原型链中的父函数)

链式调用
function Person() {
    this.name = ‘张三’;
}
Person.prototype.say = function say() {
    console.log(‘说’);
    return this;                // 函数执行完毕后,返回实例对象
}
Person.prototype.eat = function eat() {
    console.log(‘吃’);
    return this;
}
Person.prototype.run = function run() {
    console.log(‘跑’);
    return this;
}
var p = new Person();
console.log(p.say() === p);         // true
p.say().eat().run();                // 说 吃 跑

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页