javascript - 您可以通过函数表达式实现 Javascript 类吗?
问题描述
我在 leet 代码中解决了这个问题:
实现 MapSum 类:
MapSum() 初始化 MapSum 对象。void insert(String key, int val) 将 key-val 对插入到映射中。如果键已经存在,则原始键值对将被新的键值对覆盖。int sum(string prefix) 返回键以前缀开头的所有对值的总和。
在javascript中,解决问题的模板是:
/**
* Initialize your data structure here.
*/
var MapSum = function() {
};
/**
* @param {string} key
* @param {number} val
* @return {void}
*/
MapSum.prototype.insert = function(key, val) {
};
/**
* @param {string} prefix
* @return {number}
*/
MapSum.prototype.sum = function(prefix) {
};
/**
* Your MapSum object will be instantiated and called as such:
* var obj = new MapSum()
* obj.insert(key,val)
* var param_2 = obj.sum(prefix)
*/
我被类模板震惊了。我习惯于看到与此更相似的 javascript 类:
class MapSum {
constructor() {
}
insert(key, value) {
}
sum(prefix) {
}
}
提供的模板 leetcode 是否被视为一个类?这是一个什么样的班级?通过函数表达式( )初始化对象时调用什么var MapSum = function() { //....}
?以这种方式编写课程与我建议的方式相比,最大的区别/影响是什么?
解决方案
class
关键字实际上只是原型继承的语法糖
这段代码演示了这两种语法是等价的:
class MapSum {
constructor() {
}
insert(key, value) {
}
sum(prefix) {
}
}
console.log(typeof MapSum); // function (actually the constructor)
console.log(MapSum.prototype.insert); // function
console.log(MapSum.prototype.sum); // function
一个类实际上只是一个构造函数,它附加了function
一个名为的特殊对象。prototype
类的每个实例都有到构造函数原型的内部链接。
推荐阅读
- spring - Spring和Spring Security中如何访问当前正在访问控制器的用户的信息
- c++ - 有什么方法可以从变量不同的函数中检索值?C++
- javascript - How can I detect a Vue $router.back() is done, rather than the case of empty history stack?
- wordpress - 在 Divi Extra 主题中编辑帖子元数据
- import - Rust:找不到宏
- swift - 设置后更改固定的 Physicsbody 位置
- javascript - Use JavaScript to record audio as .wav in Chrome
- spring-boot - Spring Security @WithMockUser doesn't seem to work with state changing verbs (post, put..)
- python - 无法使用 Python 连接到 Teradata
- php - 第 152 行 /home/servupgg/public_html/wp-includes/class-wp-list-util.php 中的 stdClass::$plugin