2011-01-04 2 views
9

В Javascript, как вы создаете новый класс динамически без использования eval() и передаете аргумент? Например, скажем, я хочу создать новый CatViewController и передать «котенок», как бы я это сделал?экземпляр динамического класса

var myClassname = "CatViewController"; 
var cat = new myClassname("kitten"); 

Он должен решить для:

var cat = new CatViewController("kitten"); 

Спасибо!

+1

Вам нужно будет показать, как и где определена функция конструктора, чтобы @Chaos дал более точный ответ. Его общие примеры показывают, как это будет работать. – user113716

ответ

8

Пока функция находится в пределах объема вы можете сделать это:

var cat = new this[myClassname]("kitten"); 

Другим подобным способом:

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

var a = new classes["A"]("arg"); 
+1

Это будет работать только в том случае, если 'this == window', а var - в глобальной области. –

+0

@Matthew - Это не совсем правильно. Он может работать в любой области, но он должен быть определен в пределах области действия. – ChaosPandion

+0

Что делать, если вы создаете экземпляр внутри другого класса, где это! = Окно? – jaysonp

0

@Matthew - Если у вас есть ссылки на window рамки вы должны быть хорошо идти, правда? Просто используйте ссылку window вместо ключевого слова this. Кажется, работает для меня. Однако мне очень любопытно, есть ли какие-либо препятствия для этого подхода, так как я сейчас использую его в проекте. Here is a demo на основе вашей предыдущей демонстрации.