1.ES6-类-概述
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做
到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已;
2.知识点
- class 声明类;
- constructor 定义构造函数初始化;
- extends 继承父类;
- super 调用父级构造方法;
- static 定义静态方法和属性;
- 父类方法可以重写;
3.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);
打印结果:
我可以打电话!!
Phone
brand: "华为"
price: 5999
__proto__: Object
4.ES6使用Class
class Shouji{
//构造方法 名字constructor不能修改
constructor(brand, price){
this.brand = brand;
this.price = price;
}
//方法必须使用该语法, 不能使用 ES5 的对象完整形式
call(){
console.log("我可以打电话!!");
}
}
//实例化对象
let onePlus = new Shouji("一加手机", 1999);
console.log(onePlus);
打印结果:
Shouji
brand: "1+"
price: 1999
__proto__: Object
6.ES6静态成员
static的标准属性和方法属于类,而不属于实例对象。
class Phone{
//静态属性
static name = '手机';
static change(){
console.log("我可以改变世界");
}
}
let nokia = new Phone();
console.log(nokia.name);// 实例对象nokia的name,undefined
console.log(Phone.name);// 类Phonr的name, 手机
7.ES6类的继承extends
class Phone{
//父类的构造方法
constructor(brand, price){
this.brand = brand;
this.price = price;
}
//父类的成员属性
call(){
console.log("我可以打电话!!");
}
}
//子类SmartPhone继承父类Phone
class SmartPhone extends Phone {
//构造方法
constructor(brand, price, color, size){
super(brand, price);// 子类调用父类构造方法进行初始化
this.color = color; //初始化子类独有的属性
this.size = size;
}
photo(){
console.log("拍照");
}
playGame(){
console.log("玩游戏");
}
//子类对父类call方法的重写(不重写也有父类的call)
call(){
console.log('我可以进行视频通话');
}
}
const xiaomi = new SmartPhone('小米',799,'黑色','4.7inch');
// console.log(xiaomi);
xiaomi.call(); //此时调用的是子类的call方法,无法调用父类同名方法
xiaomi.photo();
xiaomi.playGame();
8.set和get
对对像的属性
进行方法的绑定,当对某个属性进行获取时执行get函数,当对某个属性进行获取时执行set函数。
get:用于封装动态属性,比如总数
set:用于判断赋值是否合法...
class Phone{
get price(){
console.log("价格属性被读取了");
return 'iloveyou';
}
//set必须要有参数
set price(newVal){
console.log('价格属性被修改了');
}
}
//实例化对象s
let s = new Phone();
console.log(s.price);//价格属性被读取了 iloveyou
s.price = 'free';//价格属性被修改了
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/blog.moonlet.cn/wp-content/themes/Sakura/functions.php on line 1078
Warning: Undefined variable $robot_comments in /www/wwwroot/blog.moonlet.cn/wp-content/themes/Sakura/comments.php on line 97