2015-12-27 74 views
0
var myObject = { 
    sub: { 
     myFunction: function() { 
      console.log('check'); 
     } 
    } 
} 

var callFn = 'sub.myFunction'; // I want it to solve it here, whats going wrong? 

myObject[callFn](); // Works, but not with 'sub.myFunction' 
myObject.sub.myFunction(); // This works ofc. 

我需要一個通用的解決方案。有人能解釋爲什麼sub.myFunction不起作用嗎?有沒有人有解決方法來解決這個問題?呼叫在可變括號對象中的子功能

+1

讓我們問另一種方式:你能解釋爲什麼你認爲''sub.myFunction''會工作嗎? – Tomalak

+0

我不認爲你可以使用'[]'來執行雙重訪問(從'myObject'訪問'sub''和從'sub'訪問'myFunction')。您可以使用兩個'[]',每個訪問一個。 –

+1

*「有人可以解釋爲什麼sub.myFunction不起作用嗎?」*因爲myObject沒有名爲'sub.myFunction'的屬性。它有一個名爲'sub'的屬性,它引用另一個對象,它具有一個名爲'myFunction'的屬性。 –

回答

0

.字符是javascript中屬性名稱的有效部分,只要將其括在引號中即可。

這也就意味着你:

  • myObject["sub.myFunction"] - 查找名爲sub.myFunctionmyObject財產。它確實不是myObjectsub財產上尋找名爲myFunction的房產。

  • myObject.sub.myFunction - 在引號中沒有.,所以它被視爲屬性存取器。這意味着我們在myObjectsub財產上尋找myFunction財產。