2016-11-12 63 views
1

我有幾個關於代碼的問題。構造函數以及Javascript如何在Javascript中工作

1)在學生構造函數中,Person.call(this,firstName)讓學生獲得人的方法嗎?或者它是否改變了這個的背景?

2)我假設Student.prototype = Object.create(Person.prototype)讓我們接觸到人的方法和屬性?

我很難理解呼叫方法。

var Person = function(firstName) { 
    this.firstName = firstName; 
}; 

Person.prototype.walk = function(){ 
    console.log("I am walking!"); 
}; 


function Student(firstName, subject) { 
    Person.call(this, firstName); 
    this.subject = subject; 
}; 

Student.prototype = Object.create(Person.prototype); // See note belo 
Student.prototype.constructor = Student; 

Student.prototype.sayHello = function(){ 
    console.log("Hello, I'm " + this.firstName + ". I'm studying " 
       + this.subject + "."); 
}; 

回答

0

1)不,它集this價值和傳遞一個說法,但因爲它的Personthis值設置爲任何this裏面Student,它也可以給Person訪問Student,而不是其他方式。

全部call(this-value, [arg1,arg2])apply(this-value, [[arg1,arg2]])確實是用給定的這個值和參數調用函數。

2)是的,Student.prototype = Object.create(Person.prototype)副本Person原型,並將其設置爲Student原型,給人Student相同原型的方法爲Person,而是一個副本,而不是相同的參考。

+0

非常感謝adeneo!我還有幾個問題。如果我創建var student1 = new Student(「john」,「physics」);當student1對象被創建時,我們調用傳入'this'(student1)的人函數和名字john。所以我們在對象person1之外調用了一個函數,允許我們共享函數 – stckpete