如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。每个构造函数定义了一个类(class)对象——由构造函数初始化的对象的集合。比如 new Date()等

类可以看做是对象类型的子类型。

除了数组类(Array)类和函数类(Function)之外,js语言核心(即EcmaScript)还定义了其它三种有用的类:

  • 日期类 Date
  • 正则类 Regexp
  • 错误类Error

    用法

    基于构造函数的对象封装,有了es6之后,直接使用class ```javascript //手机—ES5写法,原型 function Phone(brand, price){ this.brand = brand; this.price = price; }

    //添加方法 Phone.prototype.call = function(){ console.log(“我可以打电话!!”); }

    //实例化对象 let Huawei = new Phone(‘华为’, 5999); Huawei.call(); console.log(Huawei);

//class—新写法 class Shouji{ //构造方法 constructor(brand, price){ this.brand = brand; this.price = price; }

  1. //方法必须使用该语法, 不能使用 ES5 的对象完整形式
  2. call(){
  3. console.log("我可以打电话!!");
  4. }

}

let onePlus = new Shouji(“1+”, 1999);

  1. <a name="TU8nL"></a>
  2. # 构造函数的继承
  3. 下面为es5基于原型的对象的继承,es6之后,直接用class中的super就行了
  4. ```javascript
  5. //手机
  6. function Phone(brand, price){
  7. this.brand = brand;
  8. this.price = price;
  9. }
  10. Phone.prototype.call = function(){
  11. console.log("我可以打电话");
  12. }
  13. //智能手机
  14. function SmartPhone(brand, price, color, size){
  15. Phone.call(this, brand, price);
  16. this.color = color;
  17. this.size = size;
  18. }
  19. //设置子级构造函数的原型
  20. SmartPhone.prototype = new Phone;
  21. SmartPhone.prototype.constructor = SmartPhone;
  22. //声明子类的方法
  23. SmartPhone.prototype.photo = function(){
  24. console.log("我可以拍照")
  25. }
  26. SmartPhone.prototype.playGame = function(){
  27. console.log("我可以玩游戏");
  28. }
  29. const chuizi = new SmartPhone('锤子',2499,'黑色','5.5inch');
  30. console.log(chuizi);