繁体   English   中英

您可以通过 Function 表达式实现 Javascript Class 吗?

[英]Can You Implement Javascript Class Via Function Expression?

我在 leet 代码中解决了这个问题:

实现 MapSum class:

MapSum() 初始化 MapSum object。 void insert(String key, int val) 将 key-val 对插入 map。 如果键已经存在,则原始键值对将被新的键值对覆盖。 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)
 */

我对 class 模板印象深刻。 我习惯于看到 javascript 类与此更相似:

class MapSum {
  constructor() {

  }

  insert(key, value) {

  }

  sum(prefix) {

  }
}

是否提供了模板 leetcode,被视为 class? class是什么样的? 当您通过 function 表达式var MapSum = function() { //....} )初始化 object 时,它叫什么? 以这种方式与我建议的方式编写 class 的最大区别/影响是什么?

class关键字实际上只是原型 inheritance 之上的语法糖

这段代码演示了这两种语法是等价的:

 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

class 实际上只是一个构造函数function ,它附加了一个特殊的 object 命名prototype class 的每个实例都有到构造函数原型的内部链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM