Javascript自定义类,有副作用吗?

时间:2016-08-01 08:52:53

标签: javascript

我使用以下方式声明一个类并创建一个类对象,是否有副作用?

// declare class Hero
var Hero = {
  constructor: function(param) {
    return {
      id: param.id,
      name: param.name
    };
  }
};

// create a class object hero
var hero = Hero.constructor({
  id: 1,
  name: "Windstorm"
});

1 个答案:

答案 0 :(得分:4)

显示的代码没有特别的副作用。

但有几点注意事项:

  • 这不是“类”,因为该术语通常用于JavaScript。在JavaScript中,该术语涉及构造函数和相关原型。这曾经是惯例/常用用法,但ES2015(“ES6”)在语言中添加了class,使该术语在JavaScript中具有特定含义。

  • 您的Hero.constructor函数不是“构造函数”函数,因为该术语在JavaScript中使用,它是一个工厂函数。 JavaScript中的构造函数函数通过new运算符调用。

  • 请注意,在ES2015及更高版本中,符号constructor用于定义class中的构造函数。

不以任何方式 使您的代码不正确。 JavaScript是一种非常灵活的语言,使用它就像在你的例子中一样。只需指出术语,以避免以后混淆。

为了清楚起见,这里是ES5及更早版本中的等效Hero“类”,添加了sayHello方法来演示原型:

function Hero(param) {
    this.id = param.id;
    this.name = param.name;
}
Hero.prototype.sayHello = function() { // Or one might well use Object.defineProperty
    console.log("Hi, my name is " + this.name);
};

// Usage
var hero = new Hero({
  id: 1,
  name: "Windstorm"
});

在这里它是ES2015 +中的一个类:

class Hero {
    constructor(param) {
        this.id = param.id;
        this.name = param.name;
    }
    sayHello() {
        console.log("Hi, my name is " + this.name);
        // or with ES2015's templates:
        //console.log(`Hi, my name is ${this.name}`);
    }
}

// Usage
var hero = new Hero({
  id: 1,
  name: "Windstorm"
});