Class类三种函数的区别:
- 1. 普通函数(如示例代码的 方式一)
可以传参,函数内可以用this
关键字获取实例属性,需要通过实例对象调用 (如u.getUserName(obj)
) - 2. get函数(如示例代码的 方式二)
不能传参,函数内可以用this
关键字获取实例属性,需要通过实例对象调用 (如u.userImg
)
注意:调用函数时不需要加括号() - 3. 静态(static)函数(如示例代码的 方式三)
可以传参,函数内this
关键字指向类(即 User),因此不能用this
关键字获取实例的属性
需要通过类名直接调用 (如User.getUserType(obj, 1)
)
注意:
- (1)通过类名直接调用,不能通过实例对象调用
- (2)静态函数中的this指向类(即 User),this只能调用静态方法和静态属性
实例方法与静态方法的区别与选择:
- 实例方法(如方式一 和 方式二)
实例方法属于实例的行为,偏面向对象编程,复用性、灵活性较高,可以处理各种复杂的业务
get函数更能体现面向对象的思想,当遇到不需要传参的业务逻辑时,推荐使用get函数 - 静态方法(如方式三)
静态方法属于类的行为,偏面向过程编程(非面向对象),不太具有复用性,需要传入大量的参数
一般用于偏简单的业务逻辑
class User {
constructor(id, type) {
this.id = id;
this.type = type;
}
getUserName(user) {
if (this.id === user.id) {
return user.name;
}
return null;
}
get userImg() {
const user = {
id: 1,
img: 'xxx.img',
type: 'normal'
}
if (this.id === user.id) {
return user.img;
}
return null;
}
static getUserType(user, id) {
if (user.id === id) {
return user.type;
}
return null;
}
}
const u = new User(1, 'personal');
const obj = { id: 1, name:'Jack', type: 'normal' };
const uName = u.getUserName(obj);
console.log('uName:', uName);
const uImg = u.userImg;
console.log('uImg:', uImg);
const uType = User.getUserType(obj, 1);
console.log('uType:', uType);