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

Calling a public function without creating a new object JS

本文关键字:情况下 调用 函数 对象 创建 新对象      更新时间:2023-09-26

我正在玩JS的"oop"(或者我应该说"pop" -面向原型的编程?),并试图做一些像静态方法和函数。我可以从原型对象中调用函数但这不是静态函数,对吧?

我有那个代码:

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

我想调用foo函数而不创建新对象。这样的事情有可能发生吗?我该怎么做呢?

如果您试图模拟静态函数,则需要在创建"类"之后添加方法:

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

那么您可以调用A.foo();而不必使用原型。这很像Object.keys的工作方式。这使得它成为函数的属性,而不是像静态函数那样是实例的属性。

如上所述,不实例化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'