对象实例化后,JS从构造函数运行函数

dth*_*ree 5 javascript

是否有可能做到这一点:

var hammer = new Hammer(); // create a new instance
hammer(nail); // really call Hammer.prototoype.hit(object);
Run Code Online (Sandbox Code Playgroud)

我可以在原始对象上弄清楚它,但在创建对象的新实例时却不能。这就是我遇到的:

function Hammer(options) {
  this.config = options.blah;
  this.hit(/* ? */);
  return this;
}

Hammer.prototype.hit = function(obj) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

当我调用构造函数时,我想传入特殊选项 - 而不是要敲什么钉子。不过后面调用的时候,想传入一个钉子。我错过了一些东西。

Aad*_*hah 4

一种解决方案是根本不创建构造函数:

var hammer = newHammer();

hammer(nail);

hammer.clean();

function newHammer(options) {
    var config = options.blah;

    hit.clean = clean;

    return hit;

    function hit(obj) {
        // ...
    }

    function clean() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这是一个比乱搞构造函数和原型更干净的解决方案。