Javascript自定义类,是否有副作用?
我用下面的方法声明一个类并创建一个类对象,是否有副作用Javascript自定义类,是否有副作用?,javascript,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: "Winds
// 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"
});
代码显示没有特别的副作用
不过有几个注意事项:
- 这不是JavaScript中通常使用的“类”。在JavaScript中,该术语与构造函数和相关原型相关。这过去只是惯例/常用用法,但ES2015(“ES6”)在语言中添加了
,赋予了该术语在JavaScript中的特定含义class
- 您的
函数不是“constructor”函数,因为该术语在JavaScript中使用,它是一个工厂函数。JavaScript中的构造函数是通过Hero.constructor
操作符调用的new
- 请注意,在ES2015及以上版本中,符号
用于定义构造函数
中的构造函数函数类
Hero
“class”,添加了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"
});
代码显示没有特别的副作用
不过有几个注意事项:
- 这不是JavaScript中通常使用的“类”。在JavaScript中,该术语与构造函数和相关原型相关。这过去只是惯例/常用用法,但ES2015(“ES6”)在语言中添加了
,赋予了该术语在JavaScript中的特定含义class
- 您的
函数不是“constructor”函数,因为该术语在JavaScript中使用,它是一个工厂函数。JavaScript中的构造函数是通过Hero.constructor
操作符调用的new
- 请注意,在ES2015及以上版本中,符号
用于定义构造函数
中的构造函数函数类
Hero
“class”,添加了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"
});
没有副作用。您有一个函数,在给定相同的输入时总是返回相同的结果。我将使用const hero..@Thalaivar:True,但上面的代码似乎是ES5,而不是ES2015+。例如,在ES2015+中,
constructor:function()
可以是constructor()
。您可以将Hero.constructor
重命名为类似create
的名称,以避免混淆。这很有用!谢谢,没有副作用。您有一个函数,在给定相同的输入时总是返回相同的结果。我将使用const hero..@Thalaivar:True,但上面的代码似乎是ES5,而不是ES2015+。例如,在ES2015+中,constructor:function()
可以是constructor()
。您可以将Hero.constructor
重命名为类似create
的名称,以避免混淆。这很有用!谢谢。我一直期待着这些答案。我一直期待着这些答案。