类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法。javascript
Javascript是一种基于对象(object-based)的语言,你遇到的全部东西几乎都是对象。可是,它又不是一种真正的面向对象编程(OOP)语言,由于它的语法中没有class(类)。html
可是,咱们在javascript中能够模拟出“类” 。 总结的阮一峰的定义类(class)的三种方法java
构造函数 模拟"类",在其内部用this关键字指代实例对象。编程
生成实例的时候,使用new关键字。闭包
类的属性和方法,还能够定义在构造函数的prototype对象之上。ide
Javascript的国际标准ECMAScript第五版(目前通行的是第三版),提出了一个新的方法Object.create()。函数
用这个方法,"类"就是一个对象,不是函数。oop
首先,它也是用一个对象模拟"类"。在这个类的内部,定义一个构造函数createNew(),用来生成实例。this
而后,在createNew()的内部,定义一个实例对象,把这个实例对象做为返回值。idea
在基于类的语言中,对象是类的实例,而且类能够从另外一个类继承,如Java;JavaScript则是一门基于原型的语言,以原型链实现继承,其对象能够直接继承自另外一对象。
Javascript语言的继承机制。 总结自阮一峰的继承机制的设计思想 构造函数的继承 非构造函数的继承 汤姆大叔 强大的原型和原型链
它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。
JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型 来 实现继承。
涉及到继承这一块,Javascript 只有一种结构,那就是:对象。
在 javaScript 中,每一个对象都有一个指向它的原型(prototype)对象的内部连接。(使用构造函数法模拟类 函数还是 对象)这个原型对象又有本身的原型,直到某个对象的原型为null
为止(也就是再也不有原型指向),组成这条链的最后一环。这种一级一级的链结构就称为原型链(prototype chain)。
Javascript中建立的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的做用便是包含能够由特定类型实例共享的属性和方法,这个对象就是函数的原型对象。
默认状况,全部的原型对象都会有一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针。
调用构造函数建立一个新实例后,实例的内部将包含一个指向构造函数原型对象的指针,在ECMA-262中定义此指针为[[Prototype]],并不能被显式的访问到,而在Firefox,Safari和Chrome中每一个对象上有一个__proto__属性。
__proto__显示的是实例与构造函数原型对象间的关系,而非实例与构造函数间的关系。
1.构造函数绑定
3、JavaScript 闭包
闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数能够“记忆”它建立时候的环境。
闭包容许将函数与其所操做的某些数据(环境)关连起来。
在循环中建立闭包:一个常见错误 未完待续 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
封装