js类的概念和ES6的类的原理

js 类


  1. java中类的概念:

    把具有共同性质的事物归结为一类,得出一个抽象的概念——类。 在面向对象的编程语言中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合。类的概念使我们能对属于该类的全部对象进行统一的描述。

  2. js 中的类:

    js是一种弱类型语言,js本身是不支持”类”的,但可以模拟出”类”;

可以模仿类的原因

  1. 类的所有实例对象都从同一个原型对象上继承属性
  2. 原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时,他们才是属于同一个类的实例。所以初始化对象的状态的构造函数不能作为类的标识。

    用构造函数模仿类

    构造函数会自动创建对象,然后将构造函数作为这个对象的方法来调用一次,最后返回这个新对象。

    理解new 操作符:

  function F(){

   }
   new F();

经历的步骤:
1. 创建一个空对象,作为将要返回的实例对象
2. 将空对象的原型指向构造函数的prototype属性,也就是F构造函数的prototype属性。
3. 将空对象赋值给构造函数内部的this关键字,也就是this关键字会指向实例对象。
4. 开始执行构造函数内部的代码。

理解constructor属性:

任何javascript函数都可以用来做构造函数,并且调用构造函数是需要用到一个prototype属性的,因此每个javascript函数都在动拥有一个prototype属性。这个属性的值是一个对象,这个对象包含唯一一个不可美居枚举属性constructor,constructor属性的值是一个函数对象。

   var f = function(){}; //这是一个函数对象
   var p = f.prototype; //这是与f相关联的原型对象
   var c = p.constructor; //这是与原型相关联的函数
   c === f   //=>true:对于任意函数f.prototype.constructor===f
通过Object.getPrototypeOf() 可以得到:
f.__proto__ === F.prototype  => true

ES6中类就是根据这个原理来的:

class F {
       constructor(name) 
       this.name = 'Base';
       getName() {
        //==>F.prototype.getName=function(){}
      }
   }

猜你喜欢

转载自blog.csdn.net/zshsats/article/details/79883212