2016-11-12 2 views
1

У меня есть пара вопросов о коде.Конструкторы и как работает вызов в 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», «физика»); Когда объект student1 создается, мы вызываем функцию человека, проходящую в 'this' (student1) и имя john. Таким образом, мы вызываем функцию вне объекта person1, что позволяет нам совместно использовать функции – stckpete

Смежные вопросы