在不创建新对象JS的情况下调用公共函数

时间:2015-10-05 08:02:53

标签: javascript oop

我正在玩JS" oop" (或者我应该说" pop" - 面向原型的编程?)并尝试做类似静态方法和函数的事情。我可以从原型对象调用函数,但这不是完全静态函数,是吗?

我有那段代码:

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

我想在不创建新对象的情况下调用foo函数。这样的事情有可能吗?我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果您尝试模仿静态功能,则需要在创建"类"后添加方法:

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

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

然后您可以在不必使用原型的情况下调用A.foo();。它与Object.keys的工作方式非常相似。这使它成为函数的属性,而不是实例的属性,如静态函数。

答案 1 :(得分:0)

如上所述,如果不实例化foo,则无法致电a

您可以做的最好的事情是隐藏对象的实例化,如下所示:

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'