私は、webapp.core.cf1やBackbone.Routerのようなコンストラクタ関数を持っています。しかし、私は参照としてではなく、文字列として、このコンストラクタ関数を取得!私はこの要件、constrを変更することはできません。文字列にする必要があります。 classfun( "Backbone.Router")のように、これからどのようにして新しいオブジェクトを作ることができますか?コール文字列コンストラクタ関数
function classfun (cfstr)
{
...
cf = new window[cfstr]();
私がこの方法で試してみると、エラーが出ます:...はコンストラクタではありません。
なぜこれが機能しないのですか? eval()
を使用せずに別の方法がありますか?
おかげでたくさん事前に
EDIT
は、あなたの答えありがとうございました!
ありがとう、Tronix117、これが問題でした!
Benjamin Schulteさん、ありがとうございました!
function getObjectByName(name) {
var nameParts = name.split('.');
var nameLength = nameParts.length;
var scope = window;
for (var i=0; i<nameLength; ++i) {
scope = scope[nameParts[i]];
}
return scope;
}
var ObjectClass = getObjectByName(cfstr)
new ObjectClass();
はまだ最適化することができますが、このように動作する必要があります
完全な例がありますか?おそらく、http://jsfiddle.netで? –
また、実際に何が起こりたいのかのサンプルコード? – Joseph
'classfun'はどうやって呼びますか?どんな種類の変数を渡していますか? – Quentin