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

javascript-如何从类内部调用类内的函数?

  •  19
  • Petras  · 技术社区  · 16 年前

    我试图从对象内部调用函数mymethod,但是下面的语法都不起作用。 下面肯定有一个非常明显的错误,但我看不到。

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    
       <script type="text/jscript">
    
         function MyObject() {
    
           //how do I get one of these to work??
           this.MyMethod; //does not work
           this.MyMethod(); //does not work either
           MyMethod(); //does not work either
    
           this.MyMethod = function () {
             alert('It works');
           }
         }
    
         var test = new MyObject();
    
       </script>
    
    </head>
    <body>
    
    </body>
    </html>
    
    5 回复  |  直到 9 年前
        1
  •  25
  •   gnarf    15 年前

    主要有两个问题

    1. mime类型是 text/javascript 不是 text/jscript
    2. 您正在定义方法 之后 你想叫它

    所以:

      function MyObject() {
        this.MyMethod = function () {
          alert('It works');
        }
        this.MyMethod(); //should now work
      }
    
      var test = new MyObject();
    
        2
  •  2
  •   guy schaller    16 年前

    您已经将对私有方法的调用放在javascript类的构造函数中。 此时,函数尚未初始化

    但是,如果您像这样初始化对象:

    var test = new MyObject(); 
    

    然后这样做:

    test.myMethod();
    

    它会起作用的。

        3
  •  2
  •   ProfDFrancis    9 年前

    定义函数的两种方法提供了不同的可访问性

    首先,将其设置为父函数的属性,如下面脚本的“a”版本所述。如果这样做,该函数仅可用 之后 你给出了定义。

    第二,用“函数”的经典方法定义函数 函数名 ({…)}。这个定义经历了“提升”,这意味着函数在整个父对象中都可用,即甚至在定义的位置之上。您可以在下面的示例中的“B”版本中看到这一点,基于原始海报的代码。还对 https://jsfiddle.net/dnL4j30u/

    <script>
      function MyObject() {
    
        MyMethod(); 
    
        this.MyMethod = function() {
          console.log('It works A');
        }
    
        this.MyMethod(); 
    
        MyMethod(); 
    
        function MyMethod() {
          console.log('It works B');
        }
    
      }
      var test = new MyObject();
    </script>
    

    输出是

     It works B       (this works because the second definition gets hoisted)
     It works A
     It works B
    
        4
  •  0
  •   binu.py    10 年前
    var MyObject = function MyObject() {
           this.MyMethod = function () {
             alert('It works');
           } }
    
    var test = new MyObject(); test.MyMethod();
    

    以上就可以了。或者您可以创建一个构造函数并在其中调用这个方法。因此,在创建对象时,它将调用此.mymethod()。

        5
  •  -2
  •   sova    15 年前

    我很确定您可以在文件中的任何地方定义方法,即使在您调用它们之后,但是您定义方法的方式是一个缺陷。

    http://ejohn.org/apps/learn/#5

    注意,如果用匿名函数定义一个变量作为它的值,那么就不能按名称调用该函数(因为它没有名称)。相反,您应该使用约定来命名它

    function nameOfTheFunction( arguments ) {
    ...
    }
    

    我发现以下链接非常有用:

    http://www.dustindiaz.com/javascript-function-declaration-ambiguity/