Object.defineProperty與修改某個數組實現監聽效果


1、Object.defineProperty

Object.defineProperty具體資料:傳送門

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
    <script>
    /*Object.defineProperty(obj, prop, descriptor)*/
    /*可以定義方法*/
    var obj={};
    Object.defineProperty(obj,"newObj",{
        value:function(p){}
    });
    /*直接調用函數就會觸發value函數*/
    /*可以定義屬性*/
    var obj={};
    Object.defineProperty(obj,"newObj",{
        set:function(p){},
        get:function(){}
    });
    /*當obj.newObj="..."時會觸發set功能,賦值會以參數形式傳進函數,當obj.newObj會觸發get功能*/
    /*value 和set、get共存*/
    /*這個設置屬性和方法的方法可以設置雙向綁定功能,據說vue就是這樣實現的*/
    </script>
</body>
</html>

2、修改某個數組實現監聽效果

今天遇到一個很神奇的代碼,就是使用數組push方法就可以實現發送數據到到后台

當時就郁悶了,一個數組的push方法就單純追加數據,沒有什么可以監聽數組變化而

觸發方法,因為代碼是別人寫的,而且因為某些原因無法一觀,所以不斷思考與嘗試

終於有結果了。

/*這是在單獨js文件里的*/
    ;(function(){
        /*_ncp自己定義的變量*/
        if(!(_ncp instanceof Array)){
            return ;
        }
        var arr=_ncp;
        function fn(){
            Array.call(this);
            this.init();
        }
        fn.prototype=new Array();
        fn.prototype.init=function(){
            for(var i=0;i<arr.length;i++){
                this.oldPush(arr[i]);
            }
        }
        fn.prototype.oldPush=fn.prototype.push;
        fn.prototype.push=function(param){
            this.oldPush(param);
            arr.push(param);
            /*模擬ajax*/
            ajax(arr);
        }
        function ajax(p){
            /*這里寫ajax*/
            console.log(p);
        }
        _ncp=new fn();
    })();
<script>
var _ncp=_ncp||[];
var oScript=document.getElmentsByTagName("script")[0];
var create=document.createElement("script");
create.defer=true;
create.ansyc=true;
create.type="text/javascript";
create.src="js文件url地址";
oScript.parentNode.insertBefore(create,oScript);

</script>

加載js文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM