es6 方法的修飾器
方法的修飾器
修飾器不僅可以修飾類,還可以修飾類的屬性。
classPerson{
@readonly
name(){return`${this.first} ${this.last}`}
}
上面程式碼中,ES6 修飾器readonly
用來修飾“類”的name
方法。
修飾器函式readonly
一共可以接受三個引數。
functionreadonly(target, name, descriptor){
// descriptor物件原來的值如下
// {
// value: specifiedFunction,
// enumerable: false,
// configurable: true,
// writable: true
// };
descriptor.writable =false;
return descriptor;
}
readonly(Person.prototype,'name', descriptor);
// 類似於
Object.defineProperty(Person.prototype,'name', descriptor);
修飾器第一個引數是類的原型物件,上例是Person.prototype
,修飾器的本意是要“修飾”類的例項,但是這個時候例項還沒生成,所以只能去修飾原型(這不同於類的修飾,那種情況時target
引數指的是類本身);第二個引數是所要修飾的屬性名,第三個引數是該屬性的描述物件。
另外,上面程式碼說明,修飾器(readonly)會修改屬性的描述物件(descriptor),然後被修改的描述物件再用來定義屬性。
下面是另一個例子,修改屬性描述物件的enumerable
屬性,使得該屬性不可遍歷。
classPerson{
@nonenumerable
get kidCount(){returnthis.children.length;}
}
function nonenumerable(target, name, descriptor){
descriptor.enumerable =false;
return descriptor;
}
下面的@log
修飾器,可以起到輸出日誌的作用。
classMath{
@log
add(a, b){
return a + b;
}
}
function log(target,
var oldValue = descriptor.value;
descriptor.value =function(){
console.log(`Calling "${name}" with`, arguments);
return oldValue.apply(null, arguments);
};
return descriptor;
}
const math =newMath();
// passed parameters should get logged now
math.add(2,4);
上面程式碼中,@log
修飾器的作用就是在執行原始的操作之前,執行一次console.log
,從而達到輸出日誌的目的。
修飾器有註釋的作用。
@testable
classPerson{
@readonly
@nonenumerable
name(){return`${this.first} ${this.last}`}
}
從上面程式碼中,我們一眼就能看出,Person
類是可測試的,而name
方法是隻讀和不可列舉的。
下面是使用 Decorator 寫法的元件,看上去一目瞭然。
@Component({
tag:'my-component',
styleUrl:'my-component.scss'
})
exportclassMyComponent{
@Prop() first:string;
@Prop()last:string;
@State() isVisible:boolean=true;
render(){
return(
<p>Hello,my name is{this.first}{this.last}</p>
);
}
}
如果同一個方法有多個修飾器,會像剝洋蔥一樣,先從外到內進入,然後由內向外執行。
function dec(id){
console.log('evaluated', id);
return(target, property, descriptor)=> console.log('executed', id);
}
classExample{
@dec(1)
@dec(2)
method(){}
}
// evaluated 1
// evaluated 2
// executed 2
// executed 1
上面程式碼中,外層修飾器@dec(1)
先進入,但是內層修飾器@dec(2)
先執行。
除了註釋,修飾器還能用來型別檢查。所以,對於類來說,這項功能相當有用。從長期來看,它將是 JavaScript 程式碼靜態分析的重要工具。
相關推薦
ES6之修飾器Decorator
類的修飾 許多面向物件的語言都有修飾器(Decorator)函式,用來修改類的行為。 @testable class MyTestableClass { // ... } function testable(target) { target.isTestabl
es6 方法的修飾器
方法的修飾器 修飾器不僅可以修飾類,還可以修飾類的屬性。 classPerson{@readonly name(){return`${this.first} ${this.last}`}} 上面程式碼中,ES6 修飾器readonly用來修飾“類”的name方法。
ES6學習筆記九:修飾器
target ado ret () code targe 使用 rate get 一:修飾器(Decorator)是一個函數,用來修改類的行為。 1)定義與使用 function 修飾器名(target) { //target是被修飾對象,可用target.xxx進行
ES6 -- 修飾器
decorator是ES7引入的功能,它是一個函式,用來修改類甚至於是方法的行為。 類的修飾 一個簡單的栗子: @testable class MyTestableClass { // ... } function testable(targ
python兩個關於計算方法執行時間的修飾器
import time #import sys #def wrapper( func ): # start = time.time() # func( 50 ) # end = time.time() # print
es6 Babel 轉碼器對修飾器的支援
Babel 轉碼器對修飾器的支援 目前,Babel 轉碼器已經支援 Decorator。 首先,安裝babel-core和babel-plugin-transform-decorators。由於後者包括在babel-preset-stage-0之中,所以改為安裝bab
react-redux的使用採用@connect修飾器方法(簡單demo)
如果你採用 react-create-app腳手架話,按以下流程操作 1. npm install eject 彈出配置檔案 2. npm install babel-plugin-transform-decorators-regacy --save-dev 3. 在
java面向對象學習之——java中的類修飾符、成員變量修飾符、方法修飾符
16px 實例化 同時 pan 相同 nbsp 激活 fin ati 類修飾符: public(訪問控制符)——>將一個類聲明為公共類,他可以被任何對象訪問,一個程序的主類必須是公共類。abstract——>將一個類聲明為抽象類,沒有實現的方法,需要子類提供方法
python 修飾器
修飾器 python 因困擾自己多時,打算整理一下修飾器到底是什麽? 參考資料:http://python.jobbole.com/82344/ 修飾器 1. 定義2個函數 2. 基本實現 3. 問題:實現後, 要修改原來代碼中的變量名, funcB()改為funcA(funcB) 4. 解決方法:
ES6遍歷器以及generator函數的說明
內存 gen spa 遍歷 ner 性能 tor es6 計算機 從es5之後,js被各種人玩爛了之後,不得不提起的性能擺在臺面上。可能是這些原因,js把底層的一些更深層的東西都開放出來了。 1.遍歷器 iterator 在了解這個東西之前,需要先了解一下計算機對內存的處理
Java中List集合排序的方法 比較器的使用 根據學生對象數序 語文 英語成績總和進行sort排序
private system.in set swift ringbuf 直觀 turn @override encoding package com.swift; import java.util.ArrayList; import java.util.Collecti
ES6遍歷器 生成器 學習整理
weight fine ons class fff size efi 生成器 排列 遍歷器[叠代器](Iterator) 就是這樣一種機制。它是一種接口,為各種不同的數據結構提供統一的訪問機制。任何數據結構只要部署 Iterator 接口,就可以完成遍歷操作(即依次處理該數
.NET 簡易方法攔截器
parameter hid 接口 tle 說過 inf img 異常 肩膀 偉大的無產階級Willaim曾說過:"無論你覺得自己多麽的了不起,也永遠有人比你更強"。對,我說過!我就是william。 今天想記錄一下在項目中遇到的一個比較有意思的
JS數組去重 ES6 方法
.so sort true index 數組排序 break [] rom array let arr = [0, 0, 0, 0, 1, 2, 3, 4, 4, 5, 2, 3, 3, 3, 9, 8, 9]; //數組去重法1 console.log(Array.f
python函數修飾器(decorator)
基於 sig seconds init The put ner 語言 app python語言本身具有豐富的功能和表達語法,其中修飾器是一個非常有用的功能。在設計模式中,decorator能夠在無需直接使用子類的方式來動態地修正一個函數,類或者類的方法的功能。當你希望在不修
修飾器-2
return you rom input 執行 per ron swd username import timeuser,passwd = "gx","gx123"def auth(func): def wrapper(*args,**kwargs):
服務器數據恢復通用方法+服務器分區丟失恢復案例
中心 進行 位置 數據鏡像 過程 指定 結構 數據恢復工具 pro 一、服務器數據恢復背景 本次需要進行數據恢復的服務器為某品牌CX4-480型號服務器,該服務器內共20塊硬組成raid5磁盤陣列;兩個45T的lun。機房管理員對該服務器重裝系統時由於未知原因導致了服務器磁
談談python修飾器
rop 無法 屬性。 運算 原函數 cor 層次 設計模式 異常 前言 對python的修飾器的理解一直停留在"使用修飾器把函數註冊為事件的處理程序"的層次,也是一知半解;這樣拖著不是辦法,索性今天好好整理一下關於python修飾器的概念及用法。 介紹
python基礎學習12----修飾器
執行 tro 添加 art 一個 def 是否 控制 end 修飾器可以在不修改目標函數代碼的前提下, 在目標函數執行前後增加一些額外功能 例如有一個簡單的函數 import time def func1(): print("這是一個簡單的函數") time.
JavaScript常用數組操作方法,包含ES6方法
作用 comm 增加 來替 em1 === urn nan number 一、concat() concat() 方法用於連接兩個或多個數組。該方法不會改變現有的數組,僅會返回被連接數組的一個副本。 var arr1 = [1,2,3]; var arr2 = [