2014-02-22 28 views
0
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它不運行,並說:的jsfiddle「X」未定義」有什麼不對的代碼

"Uncaught TypeError: Cannot read property 'x' of undefined."

所以x沒有定義...怎麼進來的書,當他們運行它,它會顯示=> 1.414 //兩點之間的距離。

實際上沒有從上述書代碼

擁有有效代碼無誤運行。

如何調整代碼以使其運行?

編輯:謝謝大家回答我的問題。我從教科書中逐字複製。他們也沒有定義變量。無論如何感謝和更多的問題將會出現:P。

+0

並且還,x和y是不確定的,你發佈的代碼。這意味着你沒有說:var x ='something'; – enguerranws

+1

@Praveen - 看看代碼的最後一行;) – nevelis

+0

而@OP - 它看起來像你缺少你的例子中的一段代碼。看起來你開始聲明一個點'class',並且在你寫一個pythagorean函數的過程中。 – nevelis

回答

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}]); 
+0

謝謝。我不知道「呼叫」關鍵字。我只是試了一下,像魅力一樣工作! – user3223207

+0

+1。但我沒有得到一個downvote的原因?使用這種方法有什麼不妥? – Praveen

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

http://jsfiddle.net/mbrz4/

+0

這是如何使用'arguments'對象? –

+0

我編輯了小提琴,以顯示它如何工作 –

+0

console.log()將點(p1,p2)的結果打印到控制檯 –

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關鍵字。

相關問題