面向对象
关键字
this
:一个临时变量,不具体只代表谁;
★★★★★★
调用对象是谁就代表谁(动态指定);
构造函数:
★★★★★
用来构造(创建)对象的函数
注意:
①
构造器的名字首字母一定要大写;
②
使用构造器创建对象的时候需要添加关键字new;
如:
构造函数function(){}
通过构造函数实例化(创建、构造)一个对象
new Person();
原型:
①
是类里面的一个共享空间
②
可以在这个共享空间中添加一些公共的(只要通过这个类创建的都可以访问)属性和方法;
③
所有对象访问的这些属性和方法都存在内存的同一个地址中
④
存放对象、存放数组时,一个对象中数组里面的内容被删除或者添加,其他的也会跟着删除或添加;
原型
继承
:
改变原型对象->所有通过这个类创建出来的对象,都会具备改变原型对象
例子:
function Person() { }
var obj = {name:"
小明"}
;
Person.prototype = obj
;
Person是一个类,改变Person的原型对象为obj,所有通过Person创建出来的对象,就具备了obj里面的特征(name=小明)
如果改变Person原型对象为另一个类实例化的对象,他就会具备另一个类的特征;
例子:
function Animal() {
this.type = "
动物";
}
function Person() { }
Person.prototype = new Animal();
这个时候Person类会具备Animal里面的特征(type=动物);
命名空间
给自己所有的类、函数、变量添加一个统一的入口;避免命名冲突,自己的文件好找;
公式
:window.nameSpace = window.nameSpace||{}
回调函数
:也是一个函数,只是把函数当成了参数;
意义
:当执行某个函数的时候,符合了某个条件会返回去,调用传过来的函数主要用于监听某个事件什么时候执行完
毕;
基本概念
:function loadData(){ };
函数名
:是函数的名字,代表的是整个函数,函数名是loadData;
调用函数
:执行函数体里面的代码
loadData( );
绑定
:bind可以绑定外面的this,函数里面的this都表示绑定的this;
this:
✭✭✭✭✭✭
谁调用 this 就表示哪个对象
1. 普通函数里面 没有任何调用这个函数的对象(没有this的指向)->这里面的this表示的是 window对象
2. 在构造函数里面 this表示 即将被实例化出来的对象;
Call/apply:
都可以改变this的指向,同时调用了指定的函数
区别: ① Call:只能一个个传参; ② Apply:只能传数组
使用环境:子类构造函数中的参数传递到父类里面,同时更改父类的this指向
继承
:
多重继承:Student -> Person -> Animal
__proto__
:都表示原型对象
调用的方式不一样
对象名调用xiaoming.__proto__
prototype:
都表示原型对象
使用类名调用 Student.prototype
Function.prototype.jiCheng = function (sup) {
var prototype = Object.create(sup.prototype);
prototype.constructor = this;
this.prototype = prototype;
};
原型链
子类和父类的原型关系
如:学生类
继承
人类 ->
人类
继承
动物类 ->
动物类继承Object
类(
最底层的类)
学生类的对象查找某一个属性,
会先从自己的原型对象去查找,如果没有就从他的父类去查找;
找到->
找到的结果
没有找到->unfined
Setter
Getter
可以读取或者设置类里面的私有属性
类的静态方法
(类方法)
使用类名调用
好处:节省内存(不需要实例化对象去调用);
使用环境:工具类,不需要使用this的方法