2013-10-01 5 views
0

Мне нужна функция, которая получает конструктор как первый и (переменное число) дополнительных аргументов в качестве следующих аргументов и строит из него объект.javascript: parameterize constructor and arguments

Есть ли способ javascript для этого? Я создал следующее, но я ни в коем случае не эксперт по javascript и не уверен, что он эквивалентен тому, что я хочу.

function make_object() { 
    var args = Array.prototype.slice.call(arguments); 
    var f = args.shift(); 
    var obj = Object.create(f.prototype); 
    f.apply(obj, args); 
    return obj; 
} 

Это правильное решение? Есть что-то более простое?

+0

Вы проверили его? Делает ли он то, что вы ожидаете от этого, или делает что-то неожиданное? – Mathletics

+0

@Mathletics: Да, у меня есть простой тестовый диск, и я не заметил никакой разницы. Тем не менее, я бы хотел, чтобы эквивалентность была более формальной. –

+1

Ну, использование 'new', вероятно, будет достаточно простым -' new Foo ('arg') 'vs.' make_object (Foo, 'arg') '. Из любопытства: зачем вам это абстрагироваться так? –

ответ

0

Теоретически да, ваш код должен работать, если вы пытаетесь сделать то, что видите ниже, - но как другие прокомментировали, какова ваша конечная цель? Не хочу помечать этот код как комментарий, но это скорее комментарий, чем ответ

function make_object() { 
     var args = Array.prototype.slice.call(arguments); 
     var f = args.shift(); 
     var obj = Object.create(f.prototype); 
     f.apply(obj, args); 
     return obj; 
    } 

    function Person(color, occupation) { 
     this.eyes = color 
     this.occupation = occupation 
    } 

    Person.prototype = { 
      "homosapien":true 
    } 

var me = new make_object(Person, 'brown', 'developer'); 
console.log(me) // logs Object { eyes="brown", occupation="developer", homosapien=true}