js面向对象

 js面向对象:
类:具有相同特征的一些对象的集合;类定义了一件事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。举例来说,“狗”这个类会包含狗的一切基础特征,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和结构。一个类的方法和属性被称为“成员”。

对象:具体某一个事物了,都可以叫对象;可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。

类:通过function定义的类,所以js里类的本质为函数;

类的标志:首字母大写(函数名 )  函数内部使用this  调用函数使用new关键字;

封装(encapsulation):将数据和操作捆绑在一起,创造出一个新的类型的过程。

1.类和函数天生有prototype和__proto__两个属性,prototype又是一个对象,天生有一个constructor的属性,属性值函数或类本身;

2.普通对象:天生有一个__proto__的属性,这个属性又是一个对象,指向他的父类;

栈内存 js执行的环境 (作用域)

堆内存 存放代码的空间 存放方式 键值对的形式存 字符串的形式存

作用域链 

Js在执行之前,浏览器会给他一个全局作用域叫window,在window下分两个模块,一个是内存,一个是执行,内存会找到所有的关键字var和function 对变量进行提前声明(这个功能叫变量提升)给每个变量分配一个内存地址。在执行模块遇到变量首先会在自己的作用域下通过内存地址去查找这个变量是否存在,如果有就直接操作,没有就向他的上一级作用域的内存模块查找,如果有就操作,没有就继续向上查找,直到window。这种查找机制叫作用域链。

object是前端的数据类型,json是数据库存放的数据格式。

类和实例的关系

1.每个类(函数)都有一个prototype的属性,这个属性是一个对象,里面有一个constructor的属性,属性值就是这个类本身。

2.每个实例(对象)都有一个__proto__的属性,这个属性也是一个对象,它指向当前类的原型。

3.prototype和__proto__

二者都叫原型,前者是存放属性的对象,后者是查找属性的,前者给开发者使用,后者给浏览器使用。

原型链

在操作obj.属性的时候,首先看这个属性是私有的还是从父类的原型上继承的,如果是私有的直接使用,如果私有的没有呢就查看父类的原型上有没有,如果有就直接使用,如果没有呢,再次向父类的父类的原型上查找,一直查到基类Object上为止,如果object也没有就得到undefined。这就是原型链。

引用关系:

fn.prototype.init=function(){}

fn.prototype={ init:function(){} }

前者不会改变原有引用关系,后者会改变原有的引用关系;

注意:每个变量只能有一个地址

拷贝:浅拷贝,深拷贝; 
原文地址:https://www.cnblogs.com/wsxxy/p/11362121.html