以下のjsFiddleとコードが示すのは、本質的に同じことを行う2つの例です。呼び出しようとするとfirst();
、またはthis.first();
いずれかの例で、未定義のエラーがスローされます。init(){...}()
後でインスタンスを介して関数を呼び出すことはできますが、コンストラクターのようにオブジェクトをインスタンス化しようとするときはできません。init()を操作の順序だと思って一番下に置きましたが、そうではありません。これは、私が思っていたようには機能しません。
私はこれがどのように行われるべきか、そしてなぜこれができないのかを理解することに興味があります。
//create and return an obj
var fishSticks = function(){
return {
first: function(){
document.getElementById('output').innerHTML="Success";
},
init: function(){
try{
first(); //err
this.first(); // also err
}catch(e){
document.getElementById('output').innerHTML=e.toString();
}
}()
}
}
//do function stuff and then return 'this'
var fishFillet = function(){
var first = function(){
document.getElementById('output2').innerHTML="Success";
}
var init = function(){
try{
first(); //err
this.first(); // also err
}catch(e){
document.getElementById('output2').innerHTML=e.toString();
}
}()
return this;
}
var test = new fishSticks();
var test2 = new fishFillet();
</ p>