我使用以下方式声明一个类并创建一个类对象,是否有副作用?
// 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"
});
答案 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"
});