Node.js 局部函数中的未定义变量

Undefined Variable in Node.js local function

我只想问,为什么我的函数变量给出了一个未定义的值,但我正确地给它赋值。这是我的代码。

server.js代码

var express = require('express');

var app = express();

var server = app.listen(process.env.PORT || 3000, listen);

function listen() {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://' + host + ':' + port);
}

function asd(width, height){
  this.width = width;
  this.height = height;
}

app.use(express.static('public'));

var io = require('socket.io')(server);

io.sockets.on('connection',

  function (socket) {
  
    console.log("We have a new client: " + socket.id);

    socket.on('display',
      function(data){
        asd(data.width, data.height);
        console.log(asd.width);
      }

      );
    
    socket.on('disconnect', function() {
      console.log("Client has disconnected");
    });
  }
);

sketch.js代码

var circle;
var circles = [];
var zoom = 1;
var newZoom;
var socket;

function setup() {
  socket = io.connect('http://localhost:3000');
  createCanvas(1366, 666);
  circle = new Circle(0, 0, 64);

  var data = {
    width: 1366,
    height: 666
  };

  socket.emit('display', data);

}

function draw() {
  background(60);
  translate(width / 2, height / 2);
  newZoom = (64 / circle.radius*1.5);
  zoom = lerp(zoom, newZoom, 0.1);
  scale(zoom);
  translate(-circle.position.x, -circle.position.y);

  for (var x = circles.length - 1; x >= 0; x--) {
    if (circle.eat(circles[x])) {
      circles.splice(x, 1);
    }
  }

  circle.show();
  circle.update();
  circle.constrain();


  for (var x = 0; x < circles.length; x++) {
    circles[x].show();
  }
}

我尝试直接在控制台日志中输出data.width,里面有数据。请帮忙。

您不是在 asd 上调用 new 来创建对象。相反,您将其用作基本功能。

试试这个;

socket.on('display',
      function(data){
        var myObject = new asd(data.width, data.height);
        console.log(myObject.width);
      }
);