zoukankan      html  css  js  c++  java
  • 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文件

  • 相关阅读:
    「转」xtrabackup新版详细说明
    微博MySQL优化之路--dockone微信群分享
    分享的好处
    DBA的技能图谱
    高效运维--数据库坐而论道活动
    MySQL的诡异同步问题-重复执行一条relay-log
    把信送给加西亚读后感
    一次由于字符集问题引发的MySQL主从同步不一致问题追查
    nginx解决浏览器跨域问题
    kubernetes之pod调度
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/6843031.html
Copyright © 2011-2022 走看看