2017-05-28 24 views
0

我在學習代碼學習Javascript。我發現這個代碼:javascript中的對象的函數

// Our person constructor 
function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

// We can make a function which takes persons as arguments 
// This one computes the difference in ages between two people 
var ageDifference = function(person1, person2) { 
    return person1.age - person2.age; 
} 

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference(alice,billy); 

它的工作原理和返回的差異。然而,我想知道爲什麼Person.alice和Person.billy輸入ageDifference返回一個錯誤。年齡不是以Person.billy.age和Person.alice.age存儲的嗎?

+2

'愛麗絲'和'比利'是對象名稱,他們沒有任何關係的內部結構的對象。因此'Person.billy'和'Person.alice'引用了Person類的非現有字段(即JavaScript中的原型)。 –

回答

2

簡答題,沒有。 Person是愛麗絲和比利的原型(類似於類但不同)。它定義了此類的新對象可以使用的方法和字段,並且不是所有Person對象的容器

原型Person本身就是一個有自己的領域和方法的對象。 Person.alice暗指存在稱爲「愛麗絲」的「類字段」,所有Person對象將共享 - 並且當然與您定義的新對象無關,該對象恰好存儲在變量「alice」中。

底線Person.alice/.billy都是undefinedundefined.age正在引發錯誤。

0

new使用時,作爲模具你能想到的功能

function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

的。它不包含新對象,只是構建它。

0

人只是模式如何創建對象它不像在正常的編程語言..有人說,JavaScript是真正的OOP語言,因爲每種類型都是對象,每個函數都是對象......沒有類(模式如何創建一些對象),用於創建一些對象的對象不是類對象...如果你想模擬一些對象concpet,你必須玩原型..它有點奇怪,但原型就像一些對象的擴展,就像你說..這個對象將指向這個位置,並採取所有代碼我在哪裏poiting