コンストラクターの名前を取得する一般的な方法を見つけようとしています。私の目標は、KnockoutJS の設定フレームワークより規約を作成することです
私の考えは、ウィンドウ内のすべてのオブジェクトを反復処理することです。探しているコンストラクターが見つかったら、インデックスを使用してコンストラクターの名前を取得できます
コードソファー
(function() {
constructors = {};
window.findConstructorName = function(instance) {
var constructor = instance.constructor;
var name = constructors[constructor];
if(name !== undefined) {
return name;
}
var traversed = [];
var nestedFind = function(root) {
if(typeof root == "function" || traversed[root]) {
return
}
traversed[root] = true;
for(var index in root) {
if(root[index] == constructor) {
return index;
}
var found = nestedFind(root[index]);
if(found !== undefined) {
return found;
}
}
}
name = nestedFind(window);
constructors[constructor] = name;
return name;
}
})();
var MyApp = {};
MyApp.Foo = function() {
};
var instance = new MyApp.Foo();
console.log(findConstructorName(instance));
問題は、私がPermission denied to access property 'toString'
例外を取得することです.catchを試みることさえできないので、どのオブジェクトが問題を引き起こしているかを確認してください
フィドルhttp://jsfiddle.net/4ZwaV/
このフィドルの最終バージョン http://jsfiddle.net/2Uvd5/8/
私のConvention over Configurationプラグインの胚については、こちらをチェックして ください https://github.com/AndersMalmgren/Knockout.BindingConventions