是否有可能做到这一点:
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)
当我调用构造函数时,我想传入特殊选项 - 而不是要敲什么钉子。不过后面调用的时候,想传入一个钉子。我错过了一些东西。
一种解决方案是根本不创建构造函数:
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)
对我来说,这是一个比乱搞构造函数和原型更干净的解决方案。