zoukankan      html  css  js  c++  java
  • js 匿名函数,动态生成setter,getter方法

    在书上看到一个例子,有点错误。修改了一下。以下是我的理解!
    书上是这样写的,我加了些注解:
    function User(props){
        
    for(var prop in props){
            (
    function(currentObj){  //这里的currentObj由this传过来的。this 为 User

                alert(currentObj.constructor); //可以看出来currentObj 为User
                //创建此属性的一个新的getter(读取器)
                currentObj["get"+prop] = function(){
                    
    //alert(props.name+"  "+props.age+"  "+prop);

                    return props[prop];
                }
                
    //创建此属性的一个新的setter(设置器)

                currentObj["set"+prop] = function(val){
                    props[prop] 
    =
     val;
                };
            })(
    this);  //这里的this 为 User

        }
    }

    var user = new User({"name":"chengkai","age":22
    });

    //注意,name属性并不存在,因为它是属性对象(props Obj)的私有变量

    alert(user.name == null); //输出 true

    alert(user.getname());  
    //输出 22
    alert(user.getage());  //输出 22
    如上:为什么会输出都为22这样呢?哈哈。这里就是闭包问题了!!

    改正:
    //****************动态生成方法**********************
    //
    props 对象,如:{"name":"chengkai","age":22}
    //
    ************************************************
    function User(props){
        for(var prop in
     props){
            (
    function(currentObj){  //这里的currentObj由this传过来的。this 为 User

                //创建此属性的一个新的getter(读取器)
                (function(prop){
                currentObj[
    "get"+prop] = function
    (){
                    
    //alert(props.name+"  "+props.age+"  "+prop);

                    return props[prop];
                }
                
    //创建此属性的一个新的setter(设置器)

                currentObj["set"+prop] = function(val){
                    props[prop] 
    =
     val;
                };
                })(prop);
            })(
    this);  //这里的this 为 User

        }
    }

    var user = new User({"name":"chengkai","age":22
    });

    //注意,name属性并不存在,因为它是属性对象(props Obj)的私有变量

    alert(user.name == null); //输出 true

    alert(user.getname());  
    //输出 chengkai

    user.setage(
    11);
    user.setname(
    "kai"
    );
    alert(user.getage());  
    //输出 11

    alert(user.getname());  //输出 kai
    注意前后的区别,理解了上面匿名函数的应用,应该很好看出来是么回事啦!
  • 相关阅读:
    html5中让页面缩放的4种方法
    Beautiful Soup教程 转
    python 第三方模块 转 https://github.com/masterpy/zwpy_lst
    Windows安装Python图像处理库:PIL模块
    python常见的模块
    BeautifulSoup 常用方法
    服务器用户连接数设置
    如何查看IIS并发连接数【转】
    .net 时间戳和日期互转 【转】http://www.cnblogs.com/zhuiyi/p/5307540.html
    Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
  • 原文地址:https://www.cnblogs.com/luluping/p/1569962.html
Copyright © 2011-2022 走看看