gpt4 book ai didi

javascript OOP 语法,以及既是 var 又是函数的对象

转载 作者:行者123 更新时间:2023-11-30 13:24:09 25 4
gpt4 key购买 nike

这与我之前在这里提出的一个问题有关:How to implement chained method calls like jQuery?

我一直在使用检查答案中的方法,而且效果很好。但我想进一步改变我的工具包的语法。

  1. foo(firstarg).bar(secondarg);//应该像上面的问题一样运行。

  2. foo(onlyarg).bar//一个只有一个参数的函数

  3. foo.bar(onlyarg);//当第一个参数不合适时,也应该可以工作。

  4. foo.bar;//一个没有参数的函数,或者返回一个静态值。

我希望所有 4 种语法都能处理同一个 foo 对象,但缺乏对 OOP 的理解。我已经尝试了一些东西,到目前为止,我可以让 1 和 2 工作,让 3 和 4 工作,但不能一起工作。如果通过让每个函数返回根对象来链接仍然是一个选项,那也很好。

编辑:我显然需要更具体一些,这是我现在拥有的:

 var main = function(obj){ this.obj = obj; };
var tool = function(obj){ return new main(obj); };
main.prototype = {
alertThisPlus : function(plus){
alert(this.obj + ' ' + plus);
},
alertJustThis : function(){
return alert(this.obj);
}
};

用法

 tool('hello').alertThisPlus('world'); // returns alert('hello world')
tool().alertJustThis('hello world'); // returns alert('hello world');

我想做的是:

 tool('hello').alertThisPlus('world'); // returns alert('hello world') no change
tool.alertJustThis('hello world'); // returns alert('hello world') does not work

最佳答案

函数只是对象,因此您可以将函数添加到“工具”。您可以手动执行此操作:

tool.foobar = function() {}; 

或者,如果您的类结构适当,您可以使用混合方法。像这样:

function Tool(prefix) {
this.prefix = prefix;
}

Tool.prototype.alertThisPlus = function(suffix) {
alert((typeof this.prefix != 'undefined' ? this.prefix + ' ' : '') + suffix);
};

Tool.prototype.alertJustThis = function(msg) {
alert(msg);
};

function tool(prefix) {
return new Tool(prefix);
}

// Mix-in the methods from a static instance of Tool onto the 'tool' function.
// This makes both tool.alertThisPlus() and tool.alertJustThis() available,
// both will be called in the context of 'staticTool'.
(function() {
var staticTool = new Tool();
for (var o in staticTool) {
if (typeof staticTool[o] == 'function') {
tool[o] = staticTool[o].bind(staticTool);
}
}
})();

tool('hello').alertThisPlus('world'); // returns alert('hello world')
tool().alertJustThis('hello world'); // returns alert('hello world')
tool.alertJustThis('hello world'); // returns alert('hello world')

关于javascript OOP 语法,以及既是 var 又是函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134523/

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