2014-07-22 3 views
1

У меня есть этот объект:Javascript конструктор объекта как метод другого объекта

var x = function(){ 

    var returnObj = { 

     constructor:function(ieps){ 

      this.jow = ieps 

     } 

    } 

    returnObj.constructor.prototype.build = function(){ 

     alert(this.jow) 

    } 

    return returnObj 

} 

что я хотел бы назвать с этим:

var jow = new x.constructor("ieps") 
jow.build() 

Так я пытаюсь получить сборки () для выполнения предупреждения, но я получаю x.build() не определено.

Любые идеи?

ТНХ,

+3

Я думаю, вы хотите ** называть ** 'x':' new (x(). Constructor) ('foo') '. Вы можете получить доступ только к возвращаемому значению функции, если вы вызываете функцию. –

+0

Вы пытаетесь использовать шаблон модуля, но игнорируете внешнюю функцию. Просто добавьте '()' в конец этой функции. –

+0

Обратите внимание, что вы, вероятно, [не должны создавать конструкторы внутри функции] (http://stackoverflow.com/q/20784304/1048572) (за исключением того, что функция должна использоваться как одноэлементная). – Bergi

ответ

1

x это функция, которая возвращает объект, который имеет конструктор в качестве свойства. Вы должны сначала вызвать функцию. Во-вторых, вы не можете пойти с new x().constructor("ieps"), так как это анализируется как (new x()).constructor("ieps"), но вам действительно нужно new (x().constructor)("ieps"). Наконец, мы пришли к:

var jow = new (x().constructor)("ieps") 
jow.build() 
+0

var jow = new x(). Constructor ("ieps") на самом деле достаточно (так что лишнего явного принуждения выражения не требуется, extra() – kevinius

Смежные вопросы