场景 1 - 一切正常:
var AwesomeObject = function()
{
var self = this;
self.whatstuff = 'really awesome';
}
AwesomeObject.prototype.doStuff = function()
{
var self = this;
console.log('i did '+self.whatstuff+' stuff');
return self;
}
var awesome = new AwesomeObject(); //returns a new AwesomeObject
awesome.doStuff(); // prints 'i did really awesome stuff' on the console
现在我想要它更棒:
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
return self;
}
AwesomeObject.prototype.doStuff = function()
{
var self = this;
console.log('i did '+self.whatstuff+' stuff');
return self;
}
var awesome = new AwesomeObject(); //returns the interal f object
awesome(); // prints 'i am awesome'
awesome.doStuff(); // throws an error
新的 AwesomeObject 应该返回一个可执行函数本身,这样我就可以说'awesome();'
但我希望它也继承AwesomeObject.prototype。
添加 self.prototype = AwesomeObject.prototype; 没有帮助。
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
self.prototype = AwesomeObject.prototype;
return self;
}
好的,我可以将 AwesomeObject.prototype 函数一个接一个地复制到 f 的范围内
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
self.doStuff = function() { AwesomeObject.prototype.doStuff.apply(self,arguments); }
return self;
}
但我认为一定有更好的方法、更好的模式,它是什么?
这个问题让我发疯,非常感谢帮助。
一般来说:如何创建一个函数对象
?
有办法吗?
谢谢 弗朗兹
最佳答案
一个非常简单的模式是工厂。
var AwesomeObject = (function() {
var AwesomeObject = function() {
this.whatstuff = 'really awesome';
};
AwesomeObject.prototype.doStuff = function() {
console.log('i did ' + this.whatstuff + ' stuff');
return this;
};
return function() {
var o = new AwesomeObject();
var f = function() { console.log("I am awesome"); };
for (var k in o) {
f[k] = o[k];
}
return f;
};
})();
var foo = AwesomeObject();
foo();
foo.doStuff();
这个想法是将函数和对象分成两部分。您的对象存在于函数的局部范围内,函数可以使用该对象。
对象本身完全通过原型(prototype)继承。
关键是将对象的所有属性/方法转发给函数。
这是最干净的解决方案。
关于javascript - 需要模式 : create new object that returns an executeable function and inherits from a prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895110/