未捕获的类型错误:无法在绘图时读取未定义的属性“显示”(sketch.js:49)

Posted

技术标签:

【中文标题】未捕获的类型错误:无法在绘图时读取未定义的属性“显示”(sketch.js:49)【英文标题】:Uncaught TypeError: Cannot read property 'show' of undefined at draw (sketch.js:49) 【发布时间】:2020-08-31 06:28:39 【问题描述】:

我在函数 Spot() 中指定了函数 show(),但我仍然收到 Uncaught TypeError 这个错误,并且它在 draw() 处说它未定义。

这是 javascript 代码,我使用 p5.js 作为库。

var cols = 5;
rows = 5;
var grid = new Array(cols);

var w,h;

function Spot(i,j)
    this.x = i;
    this.y = j;
    this.f = 0;
    this.g = 0;
    this.h = 0;

    this.show = function()
        fill(255);
        stroke(0);
        rect(this.x*w,this.y*h,w-1,h-1);
      


function setup()
    createCanvas(400,400);
    console.log('A*');

    w = width/cols;
    h = height/rows;

    for(var i = 0; i < cols;i++)
        grid[i] = new Array(rows);
    

    console.log(grid);
    
    for(var i = 0; i < cols;i++)
    
        for(var j = 0; i < rows;i++)
        
            grid[i][j] = new Spot(i,j);
        
    

function draw()
    background(0);
    
    for(var i = 0; i < cols-1;i++)
    
        for(var j = 0; j < rows-1; j++)
        
            grid[i][j].show();
        
    
    body 
      padding: 0;
      margin: 0;
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/sketch.js/1.1/sketch.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"></script>

我在 chrome 控制台中收到此错误,我在本地电脑上将 html 作为 Web 服务器运行。(localhost:8000)

这是 google chrome 控制台中错误的附加图片

我刚开始使用 java 脚本,尽管进行了广泛的搜索,但仍无法解决此错误。

如果有人知道这将是有帮助的。 提前致谢

【问题讨论】:

嗨 Aniket,如果您的 sn-p 可以在浏览器中运行,它真的很有帮助。在 SO 使用 sn-p 函数来包含代码的“运行/失败”版本。您可以包含来自 CDN 的脚本。 【参考方案1】:

看看你的设置循环。

在嵌套循环中,您正在增加 i 值,而不是 j 值。

您还计算setupdraw 中不同的行/列索引。 这可能是你想要的,只是想我会指出来。

rows/cols-1cols/rows

var cols = 5;
var rows = 5;
var grid = new Array(cols);

var w,h;

function Spot(i,j)
    this.x = i;
    this.y = j;
    this.f = 0;
    this.g = 0;
    this.h = 0;

    this.show = function()
        fill(255);
        stroke(0);
        rect(this.x*w,this.y*h,w-1,h-1);
    


function setup()
    createCanvas(400,400);
    console.log('A*');

    w = width/cols;
    h = height/rows;

    for(var i = 0; i < cols;i++)
        grid[i] = new Array(rows);
    

    console.log('grid: ', grid);
    
    for(var i = 0; i < cols-1;i++)
    
        for(var j = 0; j < rows-1;j++)
        
            grid[i][j] = new Spot(i,j);
        
    

function draw()
    background(0);
    
    for(var i = 0; i < cols-1;i++)
    
        for(var j = 0; j < rows-1; j++)
        
            grid[i][j].show();
        
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/sketch.js/1.1/sketch.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"></script>

【讨论】:

顺便说一句,克里斯特,Uncaught TypeError 是否意味着仅拼写错误/逻辑语法错误? 简单的答案是“是”。访问由于拼写错误或未正确分配属性的逻辑错误而不存在的属性。

以上是关于未捕获的类型错误:无法在绘图时读取未定义的属性“显示”(sketch.js:49)的主要内容,如果未能解决你的问题,请参考以下文章

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

sencha 日历错误未捕获类型错误:无法读取页面加载时未定义的属性“indexOf”

Bootstrap - 未捕获的类型错误:无法读取复选框单击时未定义的属性“单击”

未捕获的类型错误:无法读取未定义的属性“toLowerCase”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

未捕获的类型错误:无法读取未定义的属性“长度”