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。
答案 0 :(得分:0)
嗯,你调用函数的方式,上下文(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));
答案 1 :(得分:0)
好像你想要这样做
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
关键字。
答案 2 :(得分:0)
有了这个定义:
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}]);