gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:46:36 26 4
gpt4 key购买 nike

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

// 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 中,该术语与构造函数和关联的原型(prototype)有关。这曾经只是约定俗成的用法,但 ES2015(“ES6”)将 class 添加到语言中,赋予该术语在 JavaScript 中的特定含义。

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

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

这不会以任何方式使您的代码不正确。 JavaScript 是一种非常灵活的语言,像您在示例中那样使用它没有任何问题。只是指出术语,以避免以后混淆。

为了清楚起见,这里有一个 ES5 和更早版本中的等效 Hero“类”,添加了一个 sayHello 方法来演示原型(prototype):

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自定义类,有副作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com