2014-01-22 2 views
0

Я получил следующий фрагмент кода и задавался вопросом, почему прототип не установлен. Похоже, метод getCompany переопределяет метод getName. Это потому, что предложение return возвращает JSON и отменяет все остальные методы? Он должен только переопределять функцию прототипа, если имена методов равны. Мне нужно написать в форме возврата, чтобы выставить только определенные методы.Как правильно установить прототип javascript

Person = function(name) { 

    var name = name; 

    return { 
    getName: function() {return this.name;} 

    }; 
}; 

SecondPerson = function(name) { 
    this.name = name; 

    return { 
     getCompany: function(){alert("lolz");} 
}; 
} 
SecondPerson.prototype= new Person(); 
SecondPerson.prototype.constructor = SecondPerson; 



var tom = new SecondPerson("Tom"); 
alert(tom.getName()); 

ответ

0

Является ли это потому, что пункт возврата возвращает JSON и перекрывает все другие методы?

«Объект JS-объекта», но да.

Мне нужно написать в форме «возврат», чтобы выставить только определенные методы.

Нет, вы этого не сделаете. Для того, чтобы выставить только определенные свойства, не только поставить определенные методы на экземпляре (this внутри конструктора):

function Person(name) { 
    this.getName = function() {return name;}; 
} 

Также вы, кажется, запутанные переменные свойства - см Javascript: Do I need to put this.var for every variable in an object?.

Теперь, если у нас есть это, это касается Correct javascript inheritance. Вы should not use new for creating the prototype object. Для создания специфичных для экземпляра свойств вам нужно будет явно применить родительский конструктор в новом экземпляре.

function SecondPerson(name) { 
    Person.call(this, name); 
    this.getCompany = function(){alert("lolz");}; // might be defined on the prototype 
} 
SecondPerson.prototype= Object.create(Person.prototype); 
SecondPerson.prototype.constructor = SecondPerson; 
Смежные вопросы