ES6类扩展了套接字IO

时间:2017-05-01 20:22:25

标签: javascript websocket socket.io ecmascript-6 es6-class

我正在开展一个项目,我需要扩展

  

socket.io的客户端

进入课堂,现在我无法上班,有人可以帮忙吗? :d

import io from 'socket.io-client';

export default class Websocket extends io {

  constructor(address) {
    super(address)
  }

  message() {

    alert('1')

  }

}

let socket = new Websocket();

socket.message();

如果我尝试调用消息方法chrome输出'Uncaught TypeError:socket.message不是函数'

1 个答案:

答案 0 :(得分:3)

io是工厂而不是构造函数和returns an object created by the Manager constructor

现在的错误消息意味着constructor的{​​{1}}函数返回Websocket调用返回的对象,与调用super时创建的新对象不同构造函数。这很容易证实:



Websocket




运行代码段显示var testObject = {}; function io() { return testObject;} class Websocket extends io { constructor(address) { super(address) } message() { alert('1') } } let socket = new Websocket(); console.log( "socket same as testObject: " + (socket === testObject)); console.log( "Websocket.prototype.message: " + Websocket.prototype.message);会返回Websocket返回的对象,由于它不是super创建的对象,因此不会从new继承方法Websocket.prototype方法正在进行中。

这需要重新思考设计,并可能进一步尝试和学习JavaScript对象原型如何真正起作用。它还强调了将JavaScript视为一种又一种基于类的语言的陷阱!