簡體   English   中英

Javascript - 如何從該類中調用類中的函數?

[英]Javascript - How do you call a function inside a class from within that class?

我試圖從一個對象中調用函數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>

有兩個主要問題

  1. MIME類型是text/javascript ,而不是text/jscript
  2. 您嘗試調用它后,您正在定義該方法

所以:

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

  var test = new MyObject();

你已經調用了javascript類的構造函數中的private方法。 在這一點上,功能尚未初始化

但如果你像這樣初始化對象:

var test = new MyObject(); 

然后這樣做:

test.myMethod();

它會工作。

定義函數的兩種方式提供了不同的可訪問性

首先,將其設置為父函數的屬性,如下面腳本的“A”版本中所做的那樣。 如果這樣做,該功能僅您給出定義后才可用。

() { ... }". 其次,使用“function (){...}”的經典方法定義函數。 該定義經歷“提升”,這意味着該功能在整個父對象中變得可用,即,甚至在其定義的位置之上。 您可以在下面的示例中的“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
var MyObject = function MyObject() {
       this.MyMethod = function () {
         alert('It works');
       } }

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

以上都可以。 或者你可以創建一個構造函數並在其中調用此方法。 所以在創建對象時它會調用this.MyMethod()

我很確定你可以在文件中的任何地方定義方法,即使在你調用它們之后,但是你定義方法的方法就是缺陷。

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

請注意,如果使用匿名函數定義變量作為其值,則無法按名稱調用該函數(因為它沒有名稱)。 相反,你應該使用約定命名它

function nameOfTheFunction( arguments ) {
...
}

我發現以下鏈接非常有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM