2017-05-12 9 views
0

私はJavascriptとWeb開発を全く新しくしています。私は、Webページをプログラミングされたとき、私はデバッガで確認、2つのJavaScriptコード実行していないjavascriptコード実行を停止するhtmlページの別のJavaスクリプトコード

私は、Webページを開いた
 <script src="./js/jquery.js"></script> 
    <script src="./js/ABuilder.js"></script> 
    <script src="./js/BBuilder.js"></script> 
    <script> 
    $(document).ready() 
    { 

    initA();//a function from A 

    } 
    </script> 

を作成し、機能initAは実行されませんでした。私が削除したとき。

<script src="./js/BBuilder.js"></script> 

予想通りinitAが実行されました。しかし、どのように、私はBbuilder

var day; 
var month; 
function initB() { 
var dataFile = "./js/b.json"; 
loadData(dataFile, loadB); 
} 

function loadData(jsonFile, callback) { 

$.getJSON(jsonFile, function(json) { 
    callback(json); 
}); 
} 
function loadB(data) { 
day = data.day; 
month = data.month; 
} 

Abuildコード

var age; 
var gender; 
function initA() { 
var dataFile = "./js/a.json"; 
loadData(dataFile); 
} 


function loadData(jsonFile) { 
$.getJSON(jsonFile, function (json) { 

    loadA(); 
    }); 
} 
function loadA(data) { 
    age = data.age; 
    gender = data.gender; 
}` 
+0

'.ready() 'が正しくありませんの使用。 '$(document).ready(function(){initA();})' – shaochuancs

+0

"initA関数が実行されなかった"とはどういう意味ですか?上記の '.ready()'バグが修正されている場合、 'initA'が実行されます。しかし、 'loadData()'はBBuilder.jsによってオーバーライドされるので、 'loadA()'関数は実行されません。 – shaochuancs

+0

@shaochuancs正しく理解すれば、私のプログラムが動作しない主な理由は、新しいjsファイルを導入するたびに、古いメソッドloadData()がオーバーライドされるためです。 loadData()メソッドの名前を変更することはできますか? Btw、私はjsの初心者なので、どのように2つのjsファイル間の多型関係を定義しましたか? –

答えて

0

ABuilderBBuilderをラップし、変数の競合を防ぐためにBbuilderについての詳細コードを初期化していないのでAbuilderあなたに影響をBbuilderことができそれらを2つのクラスに入れることができます。このようにして、これら2つのjsファイル間の多型関係を定義することができます。

次のコードスニペットを確認してください。この例では、クラスABuilderとクラスBBuilderが定義されています。次に、BBuilderは、ABuilderから拡張するように定義されていますが、loadData()メソッドをオーバーライドします。

// ./js/jquery.js 
 

 
// ./js/ABuilder.js 
 
function ABuilder() { 
 
    this.age = null; 
 
    this.gender = null; 
 
} 
 
ABuilder.prototype = { 
 
    initA: function() { 
 
    var dataFile = "./js/a.json"; 
 
    this.loadData(dataFile); 
 
    }, 
 
    loadData: function(jsonFile) { 
 
    $.getJSON(jsonFile, function(json){ 
 
     this.loadA(); 
 
    }.bind(this)); 
 
    }, 
 
    loadA: function(data) { 
 
    this.age = data.age; 
 
    this.gender = data.gender; 
 
    } 
 
}; 
 

 
// ./js/BBuilder.js 
 
function BBuilder() { 
 
    this.day = null; 
 
    this.month = null; 
 
} 
 
let aBuilderObj = new ABuilder(); 
 
aBuilderObj.initB = function() { 
 
    var dataFile = "./js/b.json"; 
 
    this.loadData(dataFile, this.loadB); 
 
}; 
 
aBuilderObj.loadData = function(jsonFile, callback) { 
 
    $.getJSON(jsonFile, function(json) { 
 
    callback(json); 
 
    }); 
 
}; 
 
aBuilderObj.loadB = function(data) { 
 
    this.day = data.day; 
 
    this.month = data.month; 
 
}; 
 
BBuilder.prototype = aBuilderObj; 
 

 
// init script 
 
$(document).ready(function() { 
 
    let initedABuilder = new ABuilder(); 
 
    initedABuilder.initA(); 
 
});

関連する問題