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/