gpt4 book ai didi

javascript - 如何将 js 对象用作具有原型(prototype)方法的函数和对象

转载 作者:行者123 更新时间:2023-11-30 16:44:38 26 4
gpt4 key购买 nike

用例类似于“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');

现在,如果您的对象数量很少,这将非常有效。

但是,当您获得大量方法和大量对象时,您会希望将所有方法移动到原型(prototype)中。怎么可能呢?

天真的解决方案,像这样:

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(...) 是多余的。创建闭包或绑定(bind)也不是一种选择,因为有很多总线。

当前的解决方案(没有原型(prototype))工作正常,但对象数量很少。

最佳答案

请查看评论中的链接问题。

你能做的最好的事情就是创建一个对象来保存你的可重用函数,然后将这些属性复制到您想要的每个新函数对象上创建。

var reusablefuncs = {
f1: function(){ return 'f1'; },
f2: function(){ return 'f2'; }
};

var f = function(){
return 'f';
};

Object.keys(reusablefuncs).forEach(function(prop){
f[prop] = reusablefuncs[prop];
});

console.log(f(), f.f1(), f.f2());

但是——你为什么要这样做?

关于javascript - 如何将 js 对象用作具有原型(prototype)方法的函数和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31427866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com