Javascript - 如何从该类中调用类中的函数?

时间:2010-08-22 11:44:19

标签: javascript

我试图从一个对象中调用函数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 个答案:

答案 0 :(得分:27)

有两个主要问题

  1. MIME类型为text/javascript,而非text/jscript
  2. 您正在定义之后>尝试调用它
  3. 所以:

      function MyObject() {
        this.MyMethod = function () {
          alert('It works');
        }
        this.MyMethod(); //should now work
      }
    
      var test = new MyObject();
    

答案 1 :(得分:2)

您已将调用私有方法放在javascript类的构造函数中。 在这一点上,函数尚未初始化

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

var test = new MyObject(); 

然后执行此操作:

test.myMethod();

它会起作用。

答案 2 :(得分:2)

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

首先,将其设置为父函数的属性,如下面脚本的“A”版本中所做的那样。如果这样做,该功能仅在给出定义后才可用。

其次,使用“function functionName (){...}”的经典方法定义函数。该定义经历“提升”,这意味着该功能在整个父对象中变得可用,即甚至在其定义的位置之上。您可以在下面的示例中的“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

答案 3 :(得分:0)

var MyObject = function MyObject() {
       this.MyMethod = function () {
         alert('It works');
       } }

var test = new MyObject(); test.MyMethod();

以上都可以。或者你可以创建一个构造函数并在其中调用此方法。因此,在创建对象时,它将调用this.MyMethod()

答案 4 :(得分:-2)

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

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

请注意,如果您使用匿名函数定义变量作为其值,则您无法按名称调用该函数(因为它没有名称)。相反,你应该使用约定命名它

function nameOfTheFunction( arguments ) {
...
}

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

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