下面的簡單示例和JSFiddle在這裏 - https://jsfiddle.net/jasondavis/dnLzytju/您可以看到我遇到的問題。從嵌套對象函數調用JavaScript函數失敗
我可以看到它爲什麼會發生,但我不知道如何解決它,同時保持相同的JS結構。
問題是,當我定義一個JavaScript對象原型函數,並且我有一個二級嵌套對象,它具有一個函數,並且在該函數中,我調用父級/根級別上失敗的函數。
這從下面this.nestedObject.nested_object_function()
函數的代碼試圖調用該函數this.normal_function()
但它失敗,並說:
Uncaught TypeError: this.normal_function is not a function
at Object.nested_object_function (VM2493:79)
我認爲原因是this
被引用this.nestedObject
,而不是父對象。
如果是這樣的話,那麼我該如何調用該函數,就像我試圖從嵌套對象函數中執行並調用父函數一樣?
我也試過呼籲JsLibTest.normal_function()
作爲this.nestedObject.nested_object_function()
函數的測試,但我得到了同樣的錯誤。
var JsLibTest = (function (document) {
"use strict";
var JsLibTest = function(){
// run init() function on initiation of a new JsLibTest object
this.init();
};
/**
* JsLibTest prototype functions
*/
JsLibTest.prototype = {
init: function() {
// as expected this function runs fine
this.normal_function();
// nested level objects functions run fune from parent level object function
this.nestedObject.nested_object_function();
},
normal_function: function() {
console.log('this.normal_function() ran');
},
nestedObject: {
\t \t // calling a function on the parent object fails here when called from this nested object function
nested_object_function: function() {
\t this.normal_function();
console.log('this.nestedObject.nested_object_function() ran');
},
}
};
return JsLibTest;
})(document);
// run it
$(document).ready(function(){
var Sidebar2 = new JsLibTest();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
感謝多個演示,最後的解決方案似乎是我自己的最佳解決方案。此外,我現在有很多大JS應用程序正在使用這個相同的JS設計,所以你的答案將解決我有很多問題!謝謝! – JasonDavis
@JasonDavis太棒了!我很高興能夠幫到你:) –