es6的Class类3种私有方法实现

一、命名上做区别

_ccc是一个仅限于内部使用的私有方法

 class a{
	//公有方法
	foo(b){
		this._ccc(b);
	}
	//私有方法
	_ccc(b){
		return this.data = b;
	}
}

二、私有方法移出模块

模块内部的方法对外都是可见的,内部使用b.call(this, b),这样b实际上是当前模型

 class a{
	//公有方法
	foo(c){
		cccc.call(this, c);
	}
}

//当前模块的私有方法
function cccc(c){
	return this.data = c;
}

三、使用Symbol值的唯一性,将私有方法名字成为一个Symbol值

下面的代码种,b和c都是Symbol值,外部无法获取到它们

const b = Symbol('b');
const c = Symbol('c');

class a{
	//公有方法
	foo(data){
		this[b](data)
	}
	//私有方法
	[b](data){
		return this[c] = data;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ES6中的class可以让我们更方便地定义和面向对象的编程模式。下面是一些关于ES6 class的详细解释: 1. 定义 使用class关键字定义一个名通常首字母大写。例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`); } } ``` 上面的代码定义了一个Person,包含一个构造函数和一个sayHello方法。 2. 构造函数 中的构造函数使用constructor关键字定义,用于初始化对象的属性。例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } } ``` 上面的代码定义了一个Person,包含一个构造函数,构造函数接收name和age两个参数,并将其分别赋值给对象的name和age属性。 3. 方法 中的方法可以像普通函数一样定义,例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`); } } ``` 上面的代码定义了一个Person,包含一个sayHello方法,该方法用于打印对象的name和age属性。 4. 继承 ES6中的class支持继承,使用extends关键字实现继承。例如: ``` class Student extends Person { constructor(name, age, grade) { super(name, age); this.grade = grade; } study() { console.log(`${this.name} is studying in grade ${this.grade}.`); } } ``` 上面的代码定义了一个Student,该继承自Person,包含一个构造函数和一个study方法。构造函数接收name、age和grade三个参数,其中name和age由父的构造函数初始化,grade由子的构造函数初始化。 5. 静态方法 中的静态方法使用static关键字定义,可以直接通过名调用,例如: ``` class MathUtils { static add(x, y) { return x + y; } static subtract(x, y) { return x - y; } } ``` 上面的代码定义了一个MathUtils,包含两个静态方法add和subtract,这两个方法可以直接通过名调用。 6. 属性 ES6中的class支持定义属性,可以使用get和set关键字定义属性的读写方法。例如: ``` class Person { constructor(name, age) { this._name = name; this._age = age; } get name() { return this._name; } set name(name) { this._name = name; } get age() { return this._age; } set age(age) { this._age = age; } } ``` 上面的代码定义了一个Person,包含两个属性name和age,这两个属性的读写方法分别由get和set关键字定义。注意,属性名前面加上了一个下划线,这是一约定俗成的做法,用于表示私有属性,防止属性被直接访问。 7. 静态属性 ES6中的class支持定义静态属性,使用static关键字定义静态属性。例如: ``` class MyClass { static myStaticProperty = 42; } ``` 上面的代码定义了一个MyClass,包含一个静态属性myStaticProperty,该属性的初始值为42。 总结: ES6中的class为JavaScript提供了更加完整和规范的面向对象编程模式,支持继承、静态方法、属性等等。使用class可以让我们更方便地定义和对象,提高代码的可读性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ldz_miantiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值