JS:有可能"某事(arg)"和" something.my_method(arg)"在同一时间

时间:2015-06-14 09:00:43

标签: javascript function oop methods

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

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

我知道如何用函数something.my_method(arg)

创建一个对象
something = {
  my_method: function(arg) {
    console.log('Method result', arg);
  }
}

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

喜欢这个
在档案中:

// Needed code

something(123)
something.my_method(234)

控制台输出:

Function result 123
Function result 234

3 个答案:

答案 0 :(得分:1)

嗯,这是javacript,有很多方法可以做到。

编辑:我实际上想过这个,并试图想象其他方式做同样的事情,实际上我找不到任何东西。我想到了@elcodedocle,但是它很接近,但不是你要求的,或者其他任何解决方案都是像他或我喜欢的那样重写。

快速而肮脏的方法是创建你的功能:

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

然后创建一个包含其他函数的属性:

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

虽然我必须警告你,如果你需要做除了纯粹的知识和学术好奇之外的其他事情,你可能想重新考虑代码的设计。那种"技巧"永远不会优雅,并且通常会误导你未来的代码阅读器(可能在六个月内)。

答案 1 :(得分:0)

一个功能简短:

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

答案 2 :(得分:0)

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

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

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