JSfiddle "x" undefined" 这段代码有什么问题?


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 the Definitive Guide"第1章。每当我将这段代码放在 JSfiddle 上时,它都不会运行并说:

"未捕获的类型错误:无法读取未定义的属性'x'。

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

实际上,上述书中没有一个代码具有运行没有错误的有效代码。

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

编辑:谢谢大家回答我的问题。我从课本上一个字一个字地抄写。他们也没有定义变量。无论如何,谢谢,更多的问题将在:P出现。

有了这个定义:

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

正确的称呼方式是:

points.call([{x: 1, y:2}, {x: 2, y: 3}]);

似乎你想这样做

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 关键字。

好吧,您调用函数的方式,上下文(this)将window,据我所知window[0]window[1]不存在,我不确定您期望什么,但是在您的代码中没有一次定义任何Numbers那么您期望对什么进行数学运算?

使其工作的方式是像这样使用 arguments 对象

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/

最新更新