js class
来源:互联网 发布:log4j2 java api 编辑:程序博客网 时间:2024/06/05 12:02
类不存在变量提升(hoist),这一点与 ES5 完全不同。
new Foo(); // ReferenceErrorclass Foo {}
与函数一样,类也可以使用表达式的形式定义。
const MyClass = class Me { getClassName() { return Me.name; }};上面代码使用表达式定义了一个类。需要注意的是,这个类的名字是
MyClass
而不是Me
,Me
只在 Class 的内部代码可用,指代当前类。与 ES5 一样,实例的属性除非显式定义在其本身(即定义在
this
对象上),否则都是定义在原型上(即定义在class
上)。//定义类class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; }}var point = new Point(2, 3);point.toString() // (2, 3)point.hasOwnProperty('x') // truepoint.hasOwnProperty('y') // truepoint.hasOwnProperty('toString') // falsepoint.__proto__.hasOwnProperty('toString') // true上面代码中,
x
和y
都是实例对象point
自身的属性(因为定义在this
变量上),所以hasOwnProperty
方法返回true
,而toString
是原型对象的属性(因为定义在Point
类上),所以hasOwnProperty
方法返回false
。这些都与 ES5 的行为保持一致。私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现。
class Widget { foo (baz) { bar.call(this, baz); } // ...}function bar(baz) { return this.snaf = baz;}还有一种方法是利用
Symbol
值的唯一性,将私有方法的名字命名为一个Symbol
const bar = Symbol('bar');const snaf = Symbol('snaf');export default class myClass{ // 公有方法 foo(baz) { this[bar](baz); } // 私有方法 [bar](baz) { return this[snaf] = baz; } // ...};
Class 的取值函数(getter)和存值函数(setter)
class MyClass { constructor() { // ... } get prop() { return 'getter'; } set prop(value) { console.log('setter: '+value); }}let inst = new MyClass();inst.prop = 123;// setter: 123inst.prop// 'getter'
阅读全文
0 0
- js class
- class.js
- js class
- js 设置class
- js loading image class
- JS 的 class
- Class.js 源码
- js添加样式class
- js class expression
- js封装class
- js切换换class
- js Class 化
- js遍历class
- js动态添加class
- js修改class
- js添加class属性
- js笔记八:class
- js class继承
- Pointers on C——8 Arrays.13
- vim目录树插件NERDtree安装使用
- 浅谈WebLogic和Tomcat
- js实现h5日期选择类似携程,日期上可以添加价格,是否休息,折扣等数据等等..
- Pointers on C——8 Arrays.14
- js class
- openwrt固件的下载编译流程
- 【动态规划】[luoguP1455]搭配购买
- WOJ1201-Circle
- 通过PDF无纸化测试SAP SmartForm打印效果
- 数据库索引的实现原理
- Pointers on C——8 Arrays.15
- 免安装版MySQL(4)使用SQLyog使用插入语句时无效解决方案
- 新路程------hi3516a配置ntp服务