2015-10-05 61 views
0

我正在玩JS“oop”(或者我应该说“pop” - 原型导向编程?),并试图做类似静态方法和函数的操作。我可以从原型对象调用函数,但这不完全是静态函数,是吗?在不创建新对象的情况下调用公共函数JS

我有代码:

function a(val){ 
    this.val = val; 
    console.log(this); 
    this.foo = function(){ 
    console.log('hi'); 
    } 
} 

,我想调用foo的功能,而无需创建一个新的对象。这样的事情有可能吗?我该怎么做?

+0

函数也是对象 – 2015-10-05 08:04:47

回答

0

正如您所写,您不能在没有实例化a的情况下致电foo

你能做的最好的就是隐藏物体的像这样的实例:

var a = { 
    foo: function() { 
    console.log('hi'); 
    } 
}; 

由于考虑到仿真静态函数,这是最接近你可以来:

function A(val) { 
    this.val = val; 
    console.log(this); 
} 

A.prototype.foo = function() { console.log('hi'); }; 

你做在这一点上不需要实例化A来调用foo。

A.prototype.foo(); // 'hi' 
+0

如果不是在严格模式下,可以在调用'a()'后调用'foo()'; (不需要instanciate a) – Hacketo

+0

好的,好点。 – Ben

1

如果你想模仿静态函数,你需要在创建“下课”后添加方法:

function A(val) { 
    this.val = val; 
} 

A.foo = function() { 
    console.log('hi'); 
} 

然后就可以调用A.foo();而无需使用原型。这很像Object.keys的工作方式。这使得它成为函数的一个属性,而不是实例的属性,比如静态函数。

+0

我认为这是@ marius-balaj暗示的。 –

+0

好吧,这很有趣......它与静态函数非常相似,但它不能包含只能由该类更改的私有值。这是我得到的最接近的解决方案: 'function a(val){ this.foo = function(){ console.log('hi'); } } a.val =(函数(){ 变种X = 0; 返回{ INC:函数(){ X ++;} , 得到:函数(){ 返回X; } }; })(); a.val.inc(); a.val.inc(); a.val.inc(); a.val.get();' – JDo

相关问题