用JS写一个优先级队列,里面的语法问题搞不懂

描述

复习数据结构预算法时,想用JS写一个优先级队列,对JS里面的类啊、原型什么的搞懵了,之前没遇到过这种语法问题

问题截图

Snipaste_2020-04-14_16-12-07.png

问题:

1.vscode里面这种绿色高亮是不是就是表示类?
2.当我加上this.itemPriorityQueue函数就变成绿色的了,所以想问一下如果是定义变量可不可以var?然后再pq对象上调用
3.定义enqueue()方法时,为什么要在priorityQueue的原型对象上定义


补充:第一次在这个平台上提问,刚刚打开发现被好多人踩👎了,如果有提问格式问题麻烦指正一下!谢谢

这个平台比CSDN好用多了!!!

阅读 2.1k
2 个回答

new 调用函数时,会自动执行下面的操作:

1.创建一个全新的对象
    let pq = new PriorityQueue()
2.将构造函数的原型复制给空对象的__proto__
    pq.__proto__ = PriorityQueue.prototype
3.更改 this 指向
    PriorityQueue.call(object)
4.返回值,若有返回值,并是对象,则直接返回该对象,否则返回新创建的对象。

Q1: vscode里面这种绿色高亮是不是就是表示类?
Answer: 显然,它是个函数, var pq = new PriorityQueue(),通常被称为“构造函数调用”, 但和传统的面向类语言的类构造函数不一样,最本质的区别就是:js 不会复制,对象之间是通过[[prototype]]关联的。
new 会劫持所有普通函数并用构造对象的形式来调用它

Q2: 当我加上this.itemPriorityQueue函数就变成绿色的了,所以想问一下js函数里面this.item这种写法是表示什么呢?
Answer: this.item是为了隐式传递一个对象引用,在你的代码里就是 pq,

Q3: 如果是定义变量可不可以var?
Answer: 当然不可以啦,用了 var 就不会给创建的 pq 对象 new 后有item属性

1.js本身没有类的语法,只是可以通过function来进行模拟
2.this和var都是可以的,主要看需求(this可以在new之后的实例上.,var可以在本对象内用方法进行return)
3.this.enqueue=function(){}也是一样的

ps:看你这代码应该是要完成链表的练习,这个很有意思,加油

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题