Динамическая инициализация объекта в JavaScript (как позволяет PHP Reflection)? - PullRequest
2 голосов
/ 23 апреля 2010

Используя Reflection в PHP, я могу динамически создать объект, подобный этому

$target = 'core_domain_Person';
$reflect = new ReflectionClass($target);
$obj = $reflect->newInstance();

Я хотел бы повторить эту же концепцию в JavaScript. Есть ли способ сделать это из коробки?Или есть способ повторить то, что делает Reflection?

Ответы [ 3 ]

6 голосов
/ 23 апреля 2010

Ваш комментарий гласит:

Так что я могу создавать объекты "view controller" на основе запрошенного представления. До времени выполнения я не знаю, какое представление запрашивается.

Я предлагаю сохранить все представления в views объекте так:

var views = {
    Foo: function() {},
    Bar: function() {},
    Dah: function() {}
};

Затем, используя скобочные обозначения, вы можете получить доступ к любому конструктору представления:

var viewName = 'Foo';
var instanceOfView = new views[viewName];
1 голос
/ 04 августа 2011
SomeClass = function(arg1, arg2) {
    // ...
}

ReflectUtil.newInstance('SomeClass', 5, 7);

и реализация:

/**
 * @param strClass:
 *          class name
 * @param optionals:
 *          constructor arguments
 */
ReflectUtil.newInstance = function(strClass) {
    var args = Array.prototype.slice.call(arguments, 1);
    var clsClass = eval(strClass);
    function F() {
        return clsClass.apply(this, args);
    }
    F.prototype = clsClass.prototype;
    return new F();
};
0 голосов
/ 23 апреля 2010

Я не думаю, что в JavaScript есть такая вещь, как Reflection API. Но в JavaScript все равно нет классов. Прототипы / функции являются (первоклассными) объектами, как и все остальное. Может быть раздражает, но также может быть очень полезным.

function create_instance(prototypeName) {
    eval('return new ' + prototypeName + '()');

Однако не проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...