如何将普通函数包装到构造函数中?

时间:2016-01-03 04:48:30

标签: javascript

是否可以创建一个包装函数MyFunction,当使用new进行调用时,如

instance = new MyFunction();

确实返回相同的对象,就好像调用网站SomeOtherFunction没有new

instance = SomeOtherFunction();

(我已经查看了Proxy,但看起来他们还没有得到Chrome的支持。)

编辑:

事实证明,呼叫点呼叫MyFunction是这样的:

var instance = Object.create(MyFunction.prototype);
MyFunction.apply(instance, [/* arguments */]);
// `instance` is supposed to be initialized here

3 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西?请注意,Jan Dvorak提到,您只能返回对象。

function SomeObject() {
    return Construct();
}

function Construct() {
    return { 'name' : 'yessirrreee' };
}

console.log(new SomeObject())

答案 1 :(得分:0)

您可以尝试这样的事情

function MyClass() {
}

var ob = new MyClass();

答案 2 :(得分:0)

评论后编辑

我认为这些问题需要更多背景 我建议你阅读有关higher order components的内容,但在你更好地澄清到你想要完成的内容之前,我无法帮助你。

我真的不知道你的代码是什么样的,但这里有一些建议 无论哪种方式。我的猜测nr2就是你要找的东西:

// 1
function MyFunction() {
  this.__proto__ = SomeOtherFunction()
}

function SomeOtherFunction() {
  return {
    foo: function() {
      return 'bar'
    }
  }
}

var fn = new MyFunction()
fn.foo()

// 2
function MyFunction() {}
MyFunction.prototype = SomeOtherFunction()

function SomeOtherFunction() {
  return {
    foo: function() {
      return 'bar'
    }
  }
}

var fn = new MyFunction()
fn.foo()

// 3
function MyFunction() {}
MyFunction.prototype = SomeOtherFunction.prototype

function SomeOtherFunction() {
  function Foo() {}
  Foo.prototype.foo = function() {
    return 'bar'
  }
}

var fn = new MyFunction()
fn.foo()