如何编写JavaScript模板类?

gre*_*sea 5 javascript templates class

我只是JavaScript的新手.我想写一个像C++这样的JS模板类.例如:

template <typename T>
class A
{
public:
    A(T x)
    {
        this.a=x;
    }
    ~A()
    {

    }
    void print()
    {
        std::cout<<a<<std::endl;
    }
private:
    T a;
};
Run Code Online (Sandbox Code Playgroud)

我们可以像这样使用这个类:

A<int> test(2);
test.print();
Run Code Online (Sandbox Code Playgroud)

对于C++,它很简单.但在JS中,它是如何解释的?非常感谢.

Pet*_*son 5

Javascript不需要模板来处理通用类型,因为Javascript是一种动态类型化的语言。这意味着在Javascript中,函数可以接受任何类型的参数。

为了实现与您的问题中的示例模板相同的功能,可以使用以下(更短的)Javascript代码和对象常量来实现:

var A = {
  print: function(value) {
    document.write(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

可以这样使用:

A.print(2);
Run Code Online (Sandbox Code Playgroud)

您可以在JsFiddle上看到此代码示例

如果您希望代码与C ++更紧密地对应,则可以使用以下方法通过函数代替:

var A = function(value) {
  return {
    print: function() {
      document.write(value);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

可以这样使用:

var test = A(2);
test.print();
Run Code Online (Sandbox Code Playgroud)

您可以在JsFiddle上看到这一点


mVC*_*Chr 3

你可以这样做:

var A = function ( x ) {
    var a = x;
    this.print = function () {
        console.log(a);
    };
};

var test = new A(2);
test.print(); // -> 2
Run Code Online (Sandbox Code Playgroud)

在这种情况下,变量a是私有的,函数print是公共的(与 的任何其他属性一样this),并且A是模板(原型对象)的构造函数。