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文件

时间: 2024-10-18 12:03:25

Object.defineProperty与修改某个数组实现监听效果的相关文章

修改oracle 10g rac监听端口号为1523的步骤

修改oracle  10g rac监听端口号为1523的步骤 一. 修改listener.ora ,将其中的1521改为1523.事先做该文件的备份,以便快速复原 二. 修改tnsnames.ora ,将remote_listener对应的值 在 tnsnames.ora中的参数改为1523,事先做该文件的备份,以便快速复原 三. 修改local_listener数据库初始化参数 alter system set local_listener = '(ADDRESS = (PROTOCOL =

Oracle RAC 11gR2 修改本地及SCAN监听端口

昨天同事说有套RAC集群客户要求修改数据库的监听端口,在处理的过程中,发现网上的相关资料都不是很全面,所以整理了一下,希望给其他有需要的朋友提供一点有利的参考资料.具体操作过程如下: --修改配置信息中保存的端口信息 使用GRID用户修改 srvctl modify listener -l LISTENER -p 15210srvctl modify scan_listener -p 15210 --修改本地监听及SCAN监听端口 以oracle用户登陆,执行以下修改: alter system

jquery实现导航启用数字键盘监听效果

今天写一个案例:就是导航可以用数字键盘来监听,也就是点击数字键盘相应的导航触发并且出现相应的样式.来看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{margin:0;padding:0;} ul,li{list-style: none}

oralce如何修改默认的XDB监听端口

Oracle9i默认的XML DB把HTTP的默认端口设为8080,这是一个太常用的端口了,很多别的WebServer都会使用这个端口, 如果我们安装了它,最好修改一下,避免冲突,如果不使用呢,就最好不要安装 提供三种修改的方法 1.dbca,选择你的数据库,然后Standard Database Features->Customize->Oracle XML DB option,进入这个画面你应该就知道怎么改了. 2.OEM console,在XML Database 的配置里面修改 3.用

Vue2.X监听data变化的核心API—Object.defineProperty详解

Vue2.X监听data变化的核心API—Object.defineProperty基本使用: Object.defineProperty实现响应式 1.监听对象(简单对象) 上面通过监听get,set方法了解到data变化,进而可以达到响应式. 2.复杂对象(深度监听),深度监听 触发更新视图 // 触发更新视图 function updateView() { console.log('视图更新') } 在上面例子data加: // 准备数据 const data = { name: '佩奇'

深入理解 Object.defineProperty

Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外的操作,然后返回结果.那么vue中双向数据绑定就是一个典型的应用. Vue2.x 是使用 Object.defindProperty(),来进行对对象的监听的.Vue3.x 版本之后就改用Proxy进行实现的.下面我们先来理解下Object.defineProperty作用. 一: 理解Object

浅谈js对象之数据属性、访问器属性、Object.defineProperty方法

一.对象 这个不用多说,常见的几种创建对象的方法有: 1.通过构造函数创建对象,如下所示: function Person(){ } var person = new Person(); 2.通过Object创建简单对象,例如: var obj = new Object(); 3.通过字面量创建对象. var obj = {}; 常用的一般是第一种和第三种方法. 二.属性类型 javascript中有两种属性:数据属性和访问器属性,确切的说这两种特性是用来描述对象属性的各种特征,比如说这个对象属

iOS7_ios7_如何实现UIAlertView以及监听点击事件(其它样式)_如何修改UITextField默认键盘样式

首先我们知道,UIAlertView实际上有多种样式,在xcode中,按住cmd点击UIAlertView,进入头文件我们看到: 1 typedef NS_ENUM(NSInteger, UIAlertViewStyle) { 2 UIAlertViewStyleDefault = 0, //默认样式 3 UIAlertViewStyleSecureTextInput, //加密文本样式 4 UIAlertViewStylePlainTextInput, //普通文本样式 5 UIAlertVi

zookeeper 3.5.0 修改管理控制台监听端口的方法

zookeeper 3.5.0 修改管理控制台 jetty 的监听端口是通过参数-Dzookeeper.admin.serverPort=8088来实现的 而不是-Djetty.port=8088,源代码为 org.apache.zookeeper.server.admin.JettyAdminServer 中的64-67行 public JettyAdminServer() throws AdminServerException {        this(Integer.getInteger