2017-02-15 12 views
-3

なぜ私の関数変数が未定義の値を与えるのか尋ねたいだけですが、値を正しく割り当てています。ここに私のコードです。Node.jsローカル関数の未定義変数

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(); 
 
    } 
 
}

Iがそのまま出力data.widthにしようとしましたコンソールログには、そこにデータがあります。助けてください。

+1

どの変数が未定義ですか? – Heidar

+0

@heidarMostafa asd.width – Rich

答えて

1

オブジェクトを作成するために、asdでnewを呼び出すのではありません。代わりに、それを基本機能として使用しています。

代わりにこれを試してください。

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

OMG!これはうまくいく。ありがとうございました – Rich