mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 13:52:22 +00:00
docs(decorator): edit method decorator
This commit is contained in:
parent
d808c68ce0
commit
075c27b54d
@ -148,7 +148,7 @@ class Person {
|
|||||||
|
|
||||||
上面代码中,修饰器`readonly`用来修饰“类”的`name`方法。
|
上面代码中,修饰器`readonly`用来修饰“类”的`name`方法。
|
||||||
|
|
||||||
此时,修饰器函数一共可以接受三个参数,第一个参数是所要修饰的目标对象,即类的实例(这不同于类的修饰,那种情况时`target`参数指的是类本身);第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。
|
修饰器函数`readonly`一共可以接受三个参数。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
function readonly(target, name, descriptor){
|
function readonly(target, name, descriptor){
|
||||||
@ -168,7 +168,9 @@ readonly(Person.prototype, 'name', descriptor);
|
|||||||
Object.defineProperty(Person.prototype, 'name', descriptor);
|
Object.defineProperty(Person.prototype, 'name', descriptor);
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码说明,修饰器(readonly)会修改属性的描述对象(descriptor),然后被修改的描述对象再用来定义属性。
|
修饰器第一个参数是类的原型对象,上例是`Person.prototype`,修饰器的本意是要“修饰”类的实例,但是这个时候实例还没生成,所以只能去修饰原型(这不同于类的修饰,那种情况时`target`参数指的是类本身);第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。
|
||||||
|
|
||||||
|
另外,上面代码说明,修饰器(readonly)会修改属性的描述对象(descriptor),然后被修改的描述对象再用来定义属性。
|
||||||
|
|
||||||
下面是另一个例子,修改属性描述对象的`enumerable`属性,使得该属性不可遍历。
|
下面是另一个例子,修改属性描述对象的`enumerable`属性,使得该属性不可遍历。
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ for (let b in oproxy2) {
|
|||||||
// 99
|
// 99
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,`has`拦截只对`in`循环生效,对`for...in`循环不生效,导致不符合要求的属性没有被排除在`for...in`循环之外。
|
上面代码中,`has`拦截只对`in`运算符生效,对`for...in`循环不生效,导致不符合要求的属性没有被排除在`for...in`循环之外。
|
||||||
|
|
||||||
### construct()
|
### construct()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user