あなたが与えたコードに基づいて、私は次の仮定をしています:
仮定 1:
オブジェクトまたは関数を返す関数にテストを初期化しましたが、そのコードを質問に含めていません。これをコンストラクタと呼びます。私はそれが次のように見えると仮定します:
function test(){
//do some work here
return this;
}
//or
var test = function(){
//do some work here
return this;
}
これは、エラーをスローせずにプロトタイプのプロパティを設定できるためだと思います。これは、上記の方法で可能になります。
仮定 2:
テスト オブジェクトの複数のインスタンスを含むオブジェクト指向ソリューションを使用しようとしていると思います。この仮定は、プロトタイプの継承を使用することを目指しているという事実に基づいています。これは、「テスト」関数が 1 つのバージョンのみを持つことを意図している場合 (これはシングルトンと呼ばれます)、それほど重要ではありません。
これらの仮定に基づくと、問題は、テスト オブジェクトのインスタンスを作成していないことです。次のコードは正常に動作するはずです (仮定 1 に依存します)。
var testInstance = new test();
testInstance.build();
// wait for AJAX to return and execute success handler
testInstance.property // returns a proper value
ビルドが一度だけ行うもので、テスト オブジェクトのすべてのインスタンスに対して実行するものである場合は、それをコンストラクター自体に入れることができます。
function test(){
this.build();
return this;
};
var testInstance = new test();
// wait for AJAX to return and execute success handler
testInstance.property // returns a proper value
setTimeout
非同期呼び出しとして使用する完全なテストを次に示します
function Test(){
//do anything
return this
};
Test.prototype.getName = function(){
var self = this;
//simulate AJAX with setTimeout
setTimeout(
function(){
self.testName = "Ahmad Jamal";
console.log('name set');
}, 1000);
};
Test.prototype.build = function(){
this.getName();
console.log(this.testName); // this is undefined, as the setTimeout is still waiting
};
var test = new Test();
test.build();
// now wait to see 'name set' in the console
test.testName; // returns "Ahmad Jamal"