JavaScript, dinamik nesne başlatma (sadece PHP Reflection gibi izin verir)?

3 Cevap php

PHP Reflection kullanarak dinamik şöyle bir nesne oluşturabilirsiniz

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

Ben kutudan bunu yapmak için bir yol var JavaScript bu aynı kavram çoğaltmak istiyorsunuz? Ya da ne yaptığını Yansıma çoğaltmak için bir yolu var mı?

3 Cevap

Yorumunuz devletler:

Yani istenen görünüme dayalı "görünümü denetleyicisi" nesneleri oluşturabilirsiniz. Ben görünüm talep ediliyor ne çalışma zamanı kadar bilmiyorum.

Ben şöyle bir views nesne tüm görüşlerini tutmak öneririz:

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

Sonra, köşeli parantez açıklaması kullanarak, herhangi bir görünüm kurucu erişebilirsiniz:

var viewName = 'Foo';
var instanceOfView = new views[viewName];
SomeClass = function(arg1, arg2) {
    // ...
}

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

ve uygulama:

/**
 * @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();
};

Ben JavaScript bir Yansıma API gibi böyle bir şey olduğunu sanmıyorum. Ama JavaScript yine hiçbir sınıfları vardır. Prototipler / fonksiyonlar (birinci sınıf) olan başka bir şey gibi nesneleri. Rahatsız edici olabilir, ama aynı zamanda çok yararlı olabilir.

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

Olsa da, bu test etmedi.