2015-07-12 1 views
0

Я знаю, что это может быть странный вопрос, возможно, без практического применения, но можно ли создать класс JavaScript, который строит экземпляры, которые ведут себя как функции? Вот что я имею в виду:JavaScript-конструктор, экземпляры которого являются функциями

function Factory() {} 

// this may not be necessary, but I'll include it for sake of clarification 
Factory.prototype = Object.create(Function.prototype); 

var method = new Factory(); 

method(); // Objective: should not throw TypeError 

Для дальнейшего уточнения цели:

  • method должен быть отозван как функция
  • method должна быть результатом вызова конструктора (например, var method = new Factory() в данном случае)
  • Конструктор не может быть Function.
+0

Какую проблему вы пытаетесь решить? Вы отправили код с неизвестным приложением. У нас есть нулевой контекст, в котором можно оценить его или узнать, что еще предложить. Кроме того, немного сложно сказать, каков ваш вопрос. – jfriend00

+0

@ jfriend00 это просто вызов, по сути, никакого контекста. Мне просто интересно, если это можно сделать в JavaScript, и я думаю, что ответы на это могут показать некоторые полезные ниши различных конструкций JavaScript, чтобы сделать такое поведение возможным. –

+0

Итак, «возможно ли это», вы просто имеете в виду, что это не создает ошибки? Вы не указали, какой результат вы хотите получить, поэтому трудно оценить, возможен ли неизвестный результат. Извините, но я понятия не имею, как ответить на вопрос «возможно ли это», когда «это» вообще не описано. На самом деле, теперь я даже не знаю, в чем вопрос. – jfriend00

ответ

3

Если я правильно понял. Конструктор объектов должен вернуть свой метод. Тогда вы можете называть его, как вы описываете.

function Factory() { 
    return this.method; 
} 

Factory.prototype.method = function() { 
    console.log('from method'); 
}; 

var method = new Factory(); 

method(); 

http://jsfiddle.net/ydcoL3c2/

+0

Подождите, так что вы можете вернуть значение из конструктора? Я не знал, что это возможно. –

+0

Да, вы можете вернуть все, что вам нужно. В основном это функция. – jedrzejchalubek

+0

Я думал, что если вы вызываете какую-либо функцию в качестве конструктора (т. Е. С ключевым словом 'new'), чтобы функции не было позволено возвращать значение, иначе это вызовет ошибку. Я удивлен, что это разрешено. –

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

  • Нет связанных вопросов^_^