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。
发布于 2014-02-22 09:42:53
根据这一定义:
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}]);发布于 2014-02-22 09:02:00
那么,您调用函数的方式,上下文(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/
发布于 2014-02-22 09:08:40
好像你想这么做
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关键字。
https://stackoverflow.com/questions/21952053
复制相似问题