原型:
每个实例对象中都有一个属性__proto__, 是原型, 浏览器使用的, 不标准的属性
每个构造函数中都有一个属性prototype, 是原型, 程序员使用的
面向对象和面向过程都是编程思想
面向对象注重的是结果, 面向过程注重的是过程
面向对象的特性: 封装, 继承, 多态
继承:
1.通过原型实现继承, 改变原型的指向, 属性在初始化的时候就已经固定了, 如果是多个对象实例化, 那么每个实例对象的属性的值在初始化的时候都是一样的
2.借用构造函数继承, 不能继承方法
3.组合继承, 可以解决属性和方法的继承的问题
4.拷贝继承, 就是把一个对象中的原型中的所有的属性和方法复制一份给另一个对象
创建对象的三种方式
1. 字面量的方式
2. 调用系统的构造函数
3. 自定义构造函数
原型链: 实例对象和原型对象之间的关系, 主要是通过__proto__和prototype来联系
原型的指向是可以改变, 所以, js中是通过改变原型来实现继承
原型的作用:
实现数据共享, 继承, 都是为了节省内存空间
如果属性和方法都需要共享, 那么就把属性和方法添加到原型中
函数中的this的指向
普通的函数中this是window
构造函数中的this, 构造函数一般都是创建实例对象使用的, 是通过new关键字,构造函数也是函数
构造函数中的this是实例对象
方法中的this是实例对象
原型中的方法中的this是实例对象
定时器中的this是window
函数是对象, 构造函数也是函数, 也是对象
对象是不是函数呢?不一定
对象中有__proto__
函数中有prototype
Math是对象, 但不是函数