1. 程式人生 > >016-Decorator(修飾器,是一個函式,用來修改類的行為)

016-Decorator(修飾器,是一個函式,用來修改類的行為)

/**
 * Decorator(修飾器,是一個函式,用來修改類的行為)
 * 擴充套件類的功能
 *
 * 第三方庫修飾器的js庫:core-decorators; npm install core-decorators
 *
 */

{ //基本用法 1
    /**
     *
     * @param target  修改的類的本身
     * @param name  修改類屬性的名稱
     * @param descriptor  該屬性的描述物件
     * @returns {*}
     */
  let readonly=function(target,name,descriptor){
    descriptor.writable=false;  //限制不可寫
    return descriptor
  };

  class Test{
    @readonly //呼叫修飾器
    time(){
      return '2017-03-11'
    }
  }

  let test=new Test();

  // 修改time()函式會報錯
  // test.time=function(){
  //   console.log('reset time');
  // };

  console.log(test.time());
}


{ //基本用法 2
  let typename=function(target,name,descriptor){
    target.myname='hello';
  }

  @typename
  class Test{

  }

  console.log('類修飾符',Test.myname); //hello
  // 第三方庫修飾器的js庫:core-decorators; npm install core-decorators
}


/**
 * 前端日誌系統 ********************************************
 */
{
  let log=(type)=>{
    return function(target,name,descriptor){
      let src_method=descriptor.value;
      descriptor.value=(...arg)=>{
        src_method.apply(target,arg);
        console.info(`log ${type}`);
      }
    }
  }

  class AD{
    @log('show')
    show(){
      console.info('ad is show')
    }
    @log('click')
    click(){
      console.info('ad is click');
    }
  }

  let ad=new AD();
  ad.show();
  ad.click();
}

相關推薦

016-Decorator(修飾一個函式修改行為)

/** * Decorator(修飾器,是一個函式,用來修改類的行為) * 擴充套件類的功能 * * 第三方庫修飾器的js庫:core-decorators; npm install core-

一個函式使給定的一個二維陣列(3×3)轉置即行列互換。

import java.util.Scanner; public class Main {     public static void main(String[] args) {       &n

請編寫一個函式使其可以刪除某個連結串列中給定的(非末尾)節點你將只被給定要求被刪除的節點

今天給大家分享一個小題目,如下: 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 -- head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9

C-函式傳陣列引數給另一個函式使用malloc

// // main.c // // // Copyright © 2018 [email protected] // #include <stdio.h> #include<stdio.h> void fun(int *array){ int sum=

c語言 實現一個函式判斷一個數是不是素數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

python :閉包匿名函式decorater裝飾

#python閉包 封裝 提高程式碼複用 內層函式引用外層函式的變數,返回內層函式 返回函式不可以為迴圈變數 示例1: #標準線不同時,判斷學生的成績是否通過 方法1: def pass_60(val) : #標準線為60時,判斷是否通過 pas

一個函式將3 3矩陣轉置

#include "stdio.h" void Transpose(int (*matrix)[3]) {     int temp;     int i, j;     &

【劍指offer】請實現一個函式一個字串中的每個空格替換

劍指offer 題目如下 請實現一個函式,將一個字串中的每個空格替換成"%20"。 例如,當字串為We Are Happy, 則經過替換後的字串為 We%20Are%20Happy。 具體的程式碼實現如下 1.遍歷實現 public class Solution {

YTUOJ——寫一個函式使給定的一個二維陣列(3×3)轉置即行列互換

題目描述 寫一個函式,使給定的一個二維陣列(3×3)轉置,即行列互換。 輸入 一個3x3的矩陣 輸出 轉置後的矩陣 樣例輸入 1 2 3 4 5 6 7 8 9 樣例輸出 1 4 7 2 5 8 3 6 9 答案 #include "iostream

輸入一個整數陣列實現一個函式 調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分 所有偶數位於陣列的後半部分。

調整陣列使奇數全部都位於偶數前面。 輸入一個整數陣列,實現一個函式, 來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分, 所有偶數位於陣列的後半部分。 我用冒泡實現了這個要求: #include <stdio.h> #include <window

生成括號 給出 n 代表生成括號的對數請你寫出一個函式使其能夠生成所有可能的並且有效的括號組合。C++

核心是必須要先有一個左括號才能給字串新增括號,且無論何時右括號的個數一定要小於等於左括號的個數 而且函式引數最好不要使用引用,方便臨時變數的賦值。 C++程式碼如下 class Solution { public: vector<string> generateP

20181130(裝飾補充疊加多個裝飾有參裝飾三元表示式生成式匿名函式內建函式

  一、裝飾器的補充 1、函式屬性的傳遞 Python裝飾器(decorator)在實現的時候,被裝飾後的函式其實已經是另外一個函數了(函式名等函式屬性會發生改變),為了不影響,Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decora

一個函式隨機生成N條不重複的手機號

方法一:import random def phone(count): results = [] while len(results)!=count: starts = [138,156,130,170,188,189] start = random.ch

一個函式輸入一個數隨機生成N條郵箱

寫一個函式,這個函式的功能是,傳入一個數字,產生N條郵箱,產生的手機號不能重複。郵箱前面的長度是6 - 12之間,產生的郵箱必須包含大寫字母、小寫字母、數字和特殊字元 import random

請實現一個函式一個字串中的每個空格替換成指定符號。

題目描述 請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 /* 思路:從前向後記錄‘ ’數目,從後向前替換‘ ’。 重點:從後向前替換的時候的技巧 例如:“we are lucky”

java 劍指offer 第二題:請實現一個函式一個字串中的空格替換成“%20”。例如當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

** public class Solution { public String replaceSpace(StringBuffer str) { 首先程式給出的引數是StringBuffer類,那麼我首先考慮的是就呼叫StringBuffer類的相關方法完成操作。

1.實現一個函式可以左旋字串中的k個字元。 2.判斷一個字串是否為另外一個字串旋轉之後的字串。

1.實現一個函式,可以左旋字串中的k個字元 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB #include<stdio.h> #include<string.h> void left_move(char*str, int

刷題 編寫一個函式給出可以轉換的不同字串的個數。

題目: 將給定的數轉換為字串,原則如下:1對應 a,2對應b,…..26對應z,例如12258可以轉換為"abbeh", "aveh", "abyh", "lbeh" and "lyh",個數為5,編寫一個函式,給出可以轉換的不同字串的個數。 這是第二課第三題 兩種解法:暴力遞迴和動態規

【python基礎】python基礎5+6(set函式裝飾函式異常處理)

一. python基礎5(set,函式) 1.1set型別 '''set 類似dict,,是一組key的集合,不儲存value 本質: 無序和無重複元素的集合,可以用來去重複 ''' #建立 #建立set需要一個list或tuple作為輸入 #set重複元組在set中會

實現一個函式可以左旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB

(1)暴力旋轉O(N^2) #include<stdio.h> #include<string.h> void rotate_str(char *str,int k) { int len = strlen(str); while(k%len