首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSfiddle "x“未定义的代码有什么问题?

JSfiddle "x“未定义的代码有什么问题?
EN

Stack Overflow用户
提问于 2014-02-22 08:54:56
回答 3查看 78关注 0票数 0
代码语言:javascript
运行
复制
points = function() {
var p1 = this[0];
var p2 = this[1];
var a=p2.x-p1.x;
var b=p2.y-p1.y;
return Math.sqrt(a*a + b*b); 
}; 
points();

我正在使用"JavaScript最终指南“第1章。每当我将这段代码放在JSfiddle上时,它就不会运行,并说:

“未定义的TypeError:无法读取未定义的属性'x‘。”

所以x没有定义..。为什么在书中,当他们运行它,它显示=> 1.414 //两个点之间的距离。

实际上,上述书中的任何一种代码都没有没有错误运行的有效代码。

如何调整代码以使其运行?

编辑:谢谢大家回答我的问题。我正逐字逐句地从教科书上抄袭。他们也没有定义变量。无论如何,谢谢,还有更多的问题会来:P。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-22 09:42:53

根据这一定义:

代码语言:javascript
运行
复制
var points = function() {
    var p1 = this[0];
    var p2 = this[1];
    var a=p2.x-p1.x;
    var b=p2.y-p1.y;
    return Math.sqrt(a*a + b*b); 
};

正确的称呼方式是:

代码语言:javascript
运行
复制
points.call([{x: 1, y:2}, {x: 2, y: 3}]);
票数 0
EN

Stack Overflow用户

发布于 2014-02-22 09:02:00

那么,您调用函数的方式,上下文(this)将是window,据我所知,window[0]window[1]并不存在,我不确定您期望的是什么--但是在代码中一次都没有定义过任何Numbers,那么您期望做什么数学操作呢?

使其工作的方式是使用arguments对象,如下所示

代码语言:javascript
运行
复制
p1 = {  
   x: 5, y: 2
};

p2 = {  
   x: 1, y: 8
};

points = function(p1, p2) {
    var a = p2.x - p1.x;
    var b = p2.y - p1.y;

    return Math.sqrt( a * a + b * b); 
}; 

console.log(points(p1,p2));

http://jsfiddle.net/mbrz4/

票数 0
EN

Stack Overflow用户

发布于 2014-02-22 09:08:40

好像你想这么做

代码语言:javascript
运行
复制
var distance = function(p1, p2) {
  return Math.sqrt(
    Math.pow(p2.x - p1.x, 2) + 
    Math.pow(p2.y - p1.y, 2)
  );
};

distance(
  {x: 1, y: 3},
  {x: 3, y: 9}
)

// 6.324555320336759

此外,在定义变量时不要忘记使用var关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21952053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档