jsリスニング配列の変化

4288 ワード

jsリスニング配列の変化
  • 最近車輪を作る時にこのような問題に遭遇しました.それは配列が内部メソッドを呼び出す時にどのように配列が変化したことを傍受することができますか.例えば、1つの配列がpushメソッドを呼び出したと仮定して、配列がpushメソッドを呼び出したことを知ったら、どのように傍受しますか.
  • 配列内部を直接呼び出す方法であれば、配列の変動は傍受されないため、以下のように改造することができる.
    //   Array   ,               
    const arrayMethods = Object.create(Array.prototype)
    //         ,            
    const ArrayProto = []
    //     Array         
    Object.getOwnPropertyNames(Array.prototype).forEach(method => {
        if(typeof arrayMethods[method] === "function"){
            ArrayProto[method] = function(){
                console.log("           "+method+"  ")
                return arrayMethods[method].apply(this, arguments)
            }
        }else{
            ArrayProto[method] = arrayMethods[method]
        }
    })
    
  • 配列の変動を傍受できるかどうか試してみましょう:
  • let list = [1, 2, 3]
    //                
    list.__proto__ = ArrayProto
    //   push  
    list.push(2)
    
    //   :
               push   //