2017-11-17 80 views
0

我有以下 JSON對象的Javascript訪問內部函數從外部

{ 
.... 
.... 
data: function() { 
    var x = 10; 
    function isBig() { 
     return x>6; 
    } 
    return x; 
} 
} 

我希望isBig爲內部數據的功能。

當我撥打data.isBig我得到undefineddata.isBig()給我一個錯誤,說isBig是不是一個函數。

+3

它不會這樣的。沒門。 –

+1

你所指的不是'json string'。這是一個簡單的JavaScript對象。該對象有一個'data'屬性,它是一個你想調用的函數。 –

+0

閱讀關於*範圍*如何在javascript中工作的內容 – charlietfl

回答

3

首先,這不是JSON。這是一個對象。 您的對象目前的結構方式,isBig只能從data內部訪問。如果你想訪問外data,最簡單的方法是讓外部對象的屬性:

{ 
    data: function() 
    { 
     var x = 10; 
     return x; 
    } 
    isBig: function(x) 
    { 
     return x > 6; 
    } 
} 

如果你不想這樣做,那麼替代方案是這樣的:

{ 
    data: function() 
    { 
     var x = 10; 
     this.isBig = function(x) 
     { 
      return x > 6; 
     } 
     return x; 
    } 
} 

調用data()正常工作(返回10),而調用new data()返回一個對象,該對象的屬性isBig對應於函數。這可以讓你做到這一點:

new myObj.data().isBig() 
+0

此代碼是否經過測試?我無法讓它工作。我做錯了什麼? https://jsfiddle.net/Lv72yrpc/ – Andrew

+0

@Andrew你忘了第二個'new'關鍵字。 – stybl

+0

構造函數可能會被欺騙......所以,如果你不介意我問......爲什麼我的代碼在這裏沒有工作,所以沒有這不會工作 –

0

obj = { 
 
\t data: function(){ 
 
    \t var x = 10; 
 
\t return this.isBig(x); 
 
    }, 
 
\t isBig: function(x){ 
 
      return x > 6; 
 
    } 
 
};

如果要複製的功能,但useally你最好與構造器添加了這一點。

f = { 
 
    isSmall: function(){}, 
 
    isBig: function(x){ 
 
    return x > 6; 
 
    } 
 
}; 
 
obj = { 
 
    data: function(){ 
 
    var x = 10; 
 
    return this.isBig(x); 
 
    }, 
 
    isBig: f.isBig 
 
}; 
 
obj.data(); 
 
obj.isBig(2); 
 
f.isBig(2);