如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。每个构造函数定义了一个类(class)对象——由构造函数初始化的对象的集合。比如 new Date()等
类可以看做是对象类型的子类型。
除了数组类(Array)类和函数类(Function)之外,js语言核心(即EcmaScript)还定义了其它三种有用的类:
- 日期类 Date
- 正则类 Regexp
-
用法
基于构造函数的对象封装,有了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; }
//方法必须使用该语法, 不能使用 ES5 的对象完整形式call(){console.log("我可以打电话!!");}
}
let onePlus = new Shouji(“1+”, 1999);
<a name="TU8nL"></a># 构造函数的继承下面为es5基于原型的对象的继承,es6之后,直接用class中的super就行了```javascript//手机function Phone(brand, price){this.brand = brand;this.price = price;}Phone.prototype.call = function(){console.log("我可以打电话");}//智能手机function SmartPhone(brand, price, color, size){Phone.call(this, brand, price);this.color = color;this.size = size;}//设置子级构造函数的原型SmartPhone.prototype = new Phone;SmartPhone.prototype.constructor = SmartPhone;//声明子类的方法SmartPhone.prototype.photo = function(){console.log("我可以拍照")}SmartPhone.prototype.playGame = function(){console.log("我可以玩游戏");}const chuizi = new SmartPhone('锤子',2499,'黑色','5.5inch');console.log(chuizi);
