zoukankan      html  css  js  c++  java
  • javascript 获取调用属性的对象

    最近碰到一个javascript 的小问题,是和闭包有关的,来自cnode 论坛,很有意思。

        var o = (function() {
            var person = {
                name: 'Vincent',
                age: 24
            };
            return {
                run: function(k) {
                    return person[k];
                }
            }
        })();
    
        // TODO 在不改变上面代码的基础上,并且在只知道 person 是一个对象的基础上
        // 只能在本段注释后面继续写代码,最终通过 o 打印出 person ,对于上文中的 person 即 `Object {name: "Vincent", age: 24}`
        // 例如 o.someThing = 1; cosnole.log(o.run('someThing'));
        // 在考虑到 person 为未知对象的基础上,尽可能写出更加完善的代码。
        // 最终,如果不能完成该题,请尽可能的记录下来你思考的过程。
    View Code

    上面就是完整的题目。

    借助object.prototype.__defineGetter__()可以实现这个功能。

      Object.prototype.__defineGetter__("getClosureVariable", function(){       
          return this;//可以返回调用这个属性的对象                                           
      });                                                                       
      var person = o.run("getClosureVariable");                                 
      console.log(person);                                                      

    __defineGetter__()的其它应用,例如,获取一个文档元素的tagname

        HTMLElement.prototype.__defineGetter__("myTagName",function(){    
            return this.tagName;                                          
        })                                                                
          console.log(document.getElementById("mySpan").myTagName);       
    <span id="mySpan"></span>      
  • 相关阅读:
    关于拷贝构造函数和赋值运算符
    笔试题(转)
    Pro *C/C++学习笔记(一)
    __cdecl
    Visual Studio 2010中C++的四大变化(转)
    小小递归函数的执行过程
    stl string常用函数
    【C/C++ string】之strcpy函数
    409 Excuses, Excuses!
    10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/bg57/p/4582162.html
Copyright © 2011-2022 走看看