【发布时间】:2015-07-15 10:27:30
【问题描述】:
用例类似于“How can I use an object as a function and an object?”
我目前的解决方案:
var newObj = function(_id){
var obj = function(arg){
console.log('call', _id, arg);
}
obj.test = function(arg){
console.log('test', _id, arg);
}
console.log('new', _id);
return obj
}
var obj = newObj('1');
obj('2');
obj.test('3');
现在,如果您的对象数量很少,这可以完美运行。
但是,当您获得大量方法和大量对象时,您可能希望将所有方法移至原型。怎么可能?
简单的解决方案,像这样:
var Obj = function(id){
this.id = id
console.log('new',id)
}
Obj.prototype = function(arg){
console.log('call', this.id, arg)
}
Obj.prototype.test = function(arg){
console.log('test', this.id, arg)
}
var obj = new Obj('1');
obj('2'); // this fails with "TypeError: obj is not a function"
obj.test('3');
不起作用。
编辑: 最终目标是缩短对象最常用方法的语法。
例如:bus 对象有方法post。当您使用bus 做某事时,此方法称为 99.99% 时间。总是写bus.post(...) 是多余的。创建闭包或绑定也不是一种选择,因为有很多总线。
当前的解决方案(没有原型)工作正常,对象数量很少。
【问题讨论】:
-
但是你为什么要这个?第一种情况仅适用,因为您返回函数而不是对象
-
请解释您的最终目标。不是你认为你需要做什么才能做你想做的事,而是你真正想做的事。举一个实际使用或您希望使用的机器的例子。
-
最终目标是缩短对象最常用方法的语法。例如:
bus对象有方法post。当您使用bus做某事时,此方法称为 99.99% 时间。 -
这对我来说听起来像是一个不必要的并发症。我只是保持简单。
标签: javascript prototype