代码之家  ›  专栏  ›  技术社区  ›  Newbie

x()是什么;参考?

  •  0
  • Newbie  · 技术社区  · 17 年前
    var y = new w();
    var x = y.z;
    
    y.z= function() {
          doOneThing();
          x();
       }
    

    哪里 w 不包含a z 对象,但包含其他对象(例如, a , b , c )

    是什么 x(); 也可能是指?(再次,这是JavaScript)
    函数是否正在调用自身?

    5 回复  |  直到 17 年前
        1
  •  2
  •   Kent Fredric    17 年前
    var y = new w();
    var x = y.z;  # x = undefined ( you say there is no w().z ) 
    
    y.z= function() {
            doOneThing();
          x();  # undefined, unless doOneThing defines x 
    };
    

    然而,如果你设法在y.z()之前定义x;那么x()将是当时定义的任何值。

    根据您的语句,以下代码执行类似的操作。

    var y = {}; 
    var x; 
    y.z = function(){ 
            x(); 
    }; 
    y.z(); # type error, x is not a function. 
    x = function(){ } ; 
    y.z(); # works.  
    x = undefined; 
    y.z(); # type error, x is not a function.
    
        2
  •  1
  •   Greg    17 年前
    var y = new w();
    
    // Create a global variable x referring to the y.z method
    var x = y.z;
    
    y.z= function() {
            doOneThing();
    
          // Refers to the global x
          x();
         }
    

    重命名可能会更清楚 x oldZ

        3
  •  1
  •   Vilx-    17 年前

    很难理解的是,在JavaScript(以及许多其他动态解释语言)中,函数也是“一等公民”。它们可以像任何其他变量一样被操纵。

    也许它可以帮助将JavaScript函数可视化为包含代码的字符串。当使用()语法调用时,JavaScript会执行字符串中的代码。但除此之外,它们可以像任何其他sting变量一样被操纵。

    虽然这种类比并不完美(字符串和函数之间实际上有很多不同),但最初理解这种函数变量对偶性可能会有所帮助。

        4
  •  1
  •   foxxtrot    17 年前

    x是一个变量,因为它的作用域在分配给y.z的函数之外,所以可以在y.z内部访问

    该代码中发生的事情是,y被初始化为一个类型为'w'的新类,然后x被设置为对当前'z'函数的引用,该函数是类'w'实例'y'的成员。然后,函数'z'被一个新函数替换,该函数调用doOneThing,然后执行'x'的值,该值已经建立为'y.z'的先前值,因此 y.z扩展了 老的 在它返回之前,只需简单地调用旧的y.z即可。

    我希望这是有道理的。

    当然,假设你确实说“y”对象没有“z”成员,那么x将是未定义的,当你尝试执行x()时,将抛出运行时错误。

        5
  •  0
  •   Joel Coehoorn    17 年前

    看起来他们试图重载w.z()方法,但这很奇怪,因为你说z()不存在。考虑到这种可能性,我会这样写代码:

    var y = new w();
    var x = y.z;
    
    y.z= function() {
          doOneThing();
          if (x) x();
       }
    

    这归结为同样的事情,但可以避免抛出错误。