[英]Calling a private/nested javascript function from an outer scope
我有這樣的JavaScript代碼。 在其中,我有一個init()函數,在該函數中,我有一個選項JSON對象,在該對象中,我有一個定義為objectselected()的函數。 我如何在按鈕單擊事件中調用該函數
我已經嘗試過像這樣的WorkFlow.init()。options.Objectselected(),但是它不起作用,
var WorkFlow = {
connectionData: [],
selectedTouchpoints: [],
init: function () {
var options = {
palleteId: "myPaletteElement",
elementId: "playAreaContainer",
TextStoreList: ['One', 'Two', 'Three'],
LinkTextStoreList: $('#drpLinkType option').map(function () {
return this.text;
}).get(),
shapeList: ['RoundedRectangle', 'Circle', 'Rectangle', 'Ellipse', 'Square', 'Diamond', 'Card', 'Database'],
diagramUpdate: function (e) {
},
objectSelected: function (e) {
},
linkUpdate: function (e) {
},
initialize: function () {
}
myGraph = new Graph(options);
options.initialize();
},
}
如何調用該函數。
您需要返回options
因為它位於init函數的作用域內
var WorkFlow = {
connectionData: [],
selectedTouchpoints: [],
init: function () {
var options = {
palleteId: "myPaletteElement",
elementId: "playAreaContainer",
TextStoreList: ['One', 'Two', 'Three'],
LinkTextStoreList: $('#drpLinkType option').map(function () {
return this.text;
}).get(),
shapeList: ['RoundedRectangle', 'Circle', 'Rectangle', 'Ellipse', 'Square', 'Diamond', 'Card', 'Database'],
diagramUpdate: function (e) {
},
objectSelected: function (e) {
},
linkUpdate: function (e) {
},
initialize: function () {
}
myGraph = new Graph(options);
options.initialize();
return options;
},
}
並將其稱為WorkFlow.init().objectSelected();
一種解決方法是您可以返回選項,然后調用它。
init: function () {
var options = {
...your code..}
return options;
},
並稱之為
var options = WorkFlow.init();
options.Objectselected();
基於Patrick的評論,您需要從init
函數返回options
:
var WorkFlow = {
connectionData: [],
selectedTouchpoints: [],
init: function () {
var options = {
palleteId: "myPaletteElement",
...
options.initialize();
return options;
},
}
就目前而言,您無權訪問options
因為它是一個局部變量-也就是其作用域的局部變量。
要訪問其內容,您需要從init()
返回它。
考慮一下:
WorkFlow.init()
當前,這返回undefined
,因為您的init()
返回任何內容。 您試圖像在jQuery中那樣進行鏈接,但這依賴於API始終返回實例。 您的路徑在init()
處發現了死角。
要解決此問題,請使用init()
返回options
-或至少要從外部訪問的部分-“導出”。
因此(基本示例)
init: function() {
var options {
my_func: function() { }, //<-- we want outside access to this
private: 'blah' //<-- this can stay private - leave it out of the export
}
//return an export, exposing only what we need to
return {
my_func: options.my_func
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.