class Star {
constructor(uname, age) {
this.uname = uname //this 指向创建的实例 this=>ldh
this.age = age
}
sing(song) {
console.log(this.uname + ‘唱’ + song)
}
}
// 2.利用类创建对象
let ldh = new Star(‘刘德华’, 18)
let zxy = new Star(‘张学友’, 20)
console.log(ldh); // {uname: “刘德华”, age: 18}
console.log(zxy); // {uname: “张学友”, age: 20}
ldh.sing(‘冰雨’) //刘德华唱冰雨
zxy.sing(‘李香兰’) //张学友唱李香兰
[](()2.6 注意事项
-
在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象
-
类里面共有的属性和方法一定要加this使用
-
类里边的this指向问题
-
constructor里面的this指向实例对象
-
方法里面的this指向这个方法的调用者
this指向问 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 题案例:
var that;
var _that;
class Star {
constructor(uname, age) {
// constructor 里面的this 指向的是 创建的实例对象
that = this;
console.log(this);
this.uname = uname;
this.age = age;
// this.sing();
this.btn = document.querySelector(‘button’);
this.btn.onclick = this.sing;
}
sing() {
// 这个sing方法里面的this 指向的是 btn 这个按钮,因为这个按钮调用了这个函数
console.log(this);
console.log(that.uname); // that.uname刘德华 that里面存储的是constructor里面的this
}
dance() {
// 这个dance里面的this 指向的是实例对象 ldh 因为ldh 调用了这个函数
_that = this;
console.log(this); //Star {uname: “刘德华”, age: undefined, btn: button}
}
}
var ldh = new Star(‘刘德华’);
console.log(that === ldh); //true
ldh.dance();
console.log(_that === ldh); // true
[](()三、继承
现实中的继承:子承父业,比如我们都继承了父亲的姓
程序中的继承:子类可以继承父类的一些属性和方法。
继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行