我正在开展一个项目,我需要扩展
进入课堂,现在我无法上班,有人可以帮忙吗? :dsocket.io的客户端
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不是函数'
答案 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视为一种又一种基于类的语言的陷阱!