js中function和class的区别

在 ES2015/ES6 中引入了class关键字,但只是语法糖,JavaScript 仍然是基于原型的

当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object )都有一个私有属性(称之为 __ proto __ )指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象( __ proto __ ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

一下是functionclass的几点不同

  1. class没有变量提升,必须先声明后使用
  2. class不能重复定义,会报语法错误
  3. class定义的类没有私有方法和私有属性
  4. class静态方法与静态属性
  • class定义的静态方法前加static关键字
  • 只能通过类名调用
  • 不能通过实例调用
  • 可与实例方法重名
  • 静态方法中的this指向类而非实例
  • 静态方法可被继承
  • 在子类中可通过super方法调用父类的静态方法

下面是babel对类的实现

var _createClass = function(){

  function defineProperties(target, props){

    for(vari =0; i < props.length; i++) {

      var descriptor = props[i];

      descriptor.enumerable = descriptor.enumerable || false;

      descriptor.configurable = true;

      if('value' in descriptor) descriptor.writable = true;

      Object.defineProperty(target, descriptor.key, descriptor);

    }

  }

  return function(Constructor, protoProps, staticProps){

    if(protoProps) defineProperties(Constructor.prototype, protoProps);

    if(staticProps) defineProperties(Constructor, staticProps);

    return Constructor;

  };

}(); 

你可能感兴趣的:(js中function和class的区别)