2012-02-24 32 views
1

爲什麼只是使用call將屬性添加到名爲jcEmployee實例?爲什麼'call()'爲函數的實例添加屬性? (請參閱小代碼)

我想知道爲什麼jc.hasOwnProperty('firstName');結果爲true

我還沒有做prototype繼承呢。這是所有的代碼,不多不少:

我知道call只是在傳遞參數時更改this,但要添加屬性?我不知道這是怎麼回事...

function Person(firstName, lastName){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 
function Employee(firstName, lastName, position){ 
    Person.call(this,firstName,lastName); 
    this.position = position; 
} 
var jc = new Employee('JC','Viray','Developer'); 
jc.hasOwnProperty('firstName'); //true 

UPDATE

現在我得到它..解決我的問題是:在C#/ Java的心態 停止思考..我失去的軌道,Person仍然一個FUNCTION儘管它是一個「構造型功能」 ...... -_-一次函數,還是一個功能..

回答

4

我想知道爲什麼jc.hasOwnProperty('firstName');結果爲true。

由於該線路Person功能:

this.firstName = firstName; 

當你說

Person.call(this, firstName, lastName); 

你實際上調用Person功能,並告訴Person設置this在fi中提供的值第一個參數 - 在你的情況下,你正在建立的Employee對象。隨後的參數call然後作爲常規參數傳遞。

結果,Person獲取與this組稱爲是當前的Employee對象,並拿起firstNamelastName財產。


或者考慮另一個例子。

var obj = { }; 
Person.call(obj, "Adam", "Rackis"); 
obj.hasOwnProperty('firstName'); //still true 
+0

是的..終於我真的得到它現在(只是點擊)...我仍然有一個'類'的心態/範式,並認爲人作爲一個類在C#/ Java的意義上...失去了軌道,它*仍然*一個功能..(!) – 2012-02-24 20:17:38

+0

@JanCarloViray - 完全。 JavaScript是一門難以置信的棘手語言,學習來自C#,Java等。看起來你很好。 – 2012-02-24 20:18:50

+0

謝謝:)這絕對是鼓勵聲明:) – 2012-02-24 20:19:41

4

要調用

Person.call(this,firstName,lastName); 

這意味着函數Personthis指任何thisEmployee(一個新的對象)。在Person內部,您正在爲this.firstNamethis.lastName分配值。

你可以寫的一樣:

function Employee(firstName, lastName, position){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.position = position; 
} 

據我所知,通話只是改變了這一點的同時傳遞參數,但要加屬性?

call不會將屬性添加到對象,但您的函數會。這正是它在這種情況下使用的原因。您想要將Person中的所有內容應用到新對象,就像您已撥打new Person(a, b)一樣。

+0

但我還沒有真正通過'prototype'建立了Employee&Person之間的連接嗎?我知道'call'是如何工作的,你剛剛描述過,但是爲Employee實例添加屬性? 'call'也這麼做嗎? – 2012-02-24 20:11:52

+0

我試圖解釋它。你知道'Person'裏面發生了什麼。您將'firstName'和'lastName'設置爲'this'。你知道使用'call',一個函數被執行時會爲'this'設置一個特定的值。你在'Person'裏面設置'this'與'Employee'裏面的'this'相同的值,因此它們是相同的。這是關係。我不明白如何更好地解釋它。 – 2012-02-24 20:14:01

+0

ohhhh。我現在明白了!花了一些重讀,但我現在得到它:)謝謝:) - (我仍然有'班'的心態,所以我沒'看'人仍然是一個函數) – 2012-02-24 20:15:19

相關問題