Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:可能吗;某物(arg)“;及;我的“我的方法(arg)”;同时_Javascript_Function_Oop_Methods - Fatal编程技术网

Javascript JS:可能吗;某物(arg)“;及;我的“我的方法(arg)”;同时

Javascript JS:可能吗;某物(arg)“;及;我的“我的方法(arg)”;同时,javascript,function,oop,methods,Javascript,Function,Oop,Methods,我知道如何创建一个函数something(arg) 我知道如何使用函数something.my_方法(arg) 当something(arg)和something.my_method(arg)都存在时,是否可以编写代码 像这样 存档: 控制台中的输出: Function result 123 Function result 234 这是JavaScript,有很多方法可以实现 编辑:我真的考虑过这个问题,并试图想象其他方法来做同样的事情,但实际上我找不到任何方法。有一个@elcodedocle

我知道如何创建一个函数
something(arg)

我知道如何使用函数
something.my_方法(arg)

something(arg)
something.my_method(arg)
都存在时,是否可以编写代码

像这样
存档:

控制台中的输出:

Function result 123
Function result 234
这是JavaScript,有很多方法可以实现

编辑:我真的考虑过这个问题,并试图想象其他方法来做同样的事情,但实际上我找不到任何方法。有一个@elcodedocle,我想了想,但很接近,但不是你问的,或者其他任何解决方案都是像他或我下面建议的那样重写

快速而肮脏的方法是创建函数:

something = function(arg) {
    console.log('Function result', arg);
}
something.my_method = function(arg) {
    console.log('Method result', arg);
}
function something(arg) {
    something.my_method = function (arg) {
        console.log('Method result', arg);
    }
    console.log('Function result', arg);
}
然后创建一个包含另一个函数的属性:

something = function(arg) {
    console.log('Function result', arg);
}
something.my_method = function(arg) {
    console.log('Method result', arg);
}
function something(arg) {
    something.my_method = function (arg) {
        console.log('Method result', arg);
    }
    console.log('Function result', arg);
}
尽管我必须警告您,如果您需要做这样的事情,而不是出于纯粹的智力和学术好奇心,那么您可能需要重新考虑代码的设计。这种“把戏”从来都不是优雅的,通常会误导你未来的代码读者(可能在六个月内成为你)。

简而言之,一个功能:

something = function(arg) {
    console.log('Function result', arg);
}
something.my_method = function(arg) {
    console.log('Method result', arg);
}
function something(arg) {
    something.my_method = function (arg) {
        console.log('Method result', arg);
    }
    console.log('Function result', arg);
}

要在对象上定义方法,可以扩展其
原型。由于
something
是一个函数,因此您希望覆盖
函数
原型:

Function.prototype.my_method = function(arg) {
    console.log("My method result", arg);
}
function something(arg) {
    console.log("My function result", arg);
}
something(123);
something.my_method(345)
哪些产出:

My function result 123
My method result 345

然而,一个更有趣的问题是,究竟为什么要这样做:-)

当然,只需在第一个属性中添加一个属性即可。函数是对象,所有对象都可以有属性和方法。不过,不要重写它,像
something.my_method=function(){}
那样分配它,但如果在
something()
之前调用
something.my_method()
则会得到
TypeError:something.my_方法不是函数
错误。所以这基本上只是对另一个QND解决方案的重写。@zmo,没错。但是根据规范,它是有效的。我有jQuery方法
$.fn.scrollport()
,用于启动滚动,还有
$.fn.scrollport\u link()
用于创建滚动链接。我认为最好创建
$.fn.scrollport.link()
而不是
$.fn.scrollport\u link