Наследование в JS немного странно, но все остальные t, что вы никогда не должны ставить прототип внутри конструктора. Точка прототипированных функций/vars заключается в том, что у вас есть единственный экземпляр этой функции для ВСЕХ экземпляров указанного класса. Точно так же это хорошо для классовых vars, сингулярного значения, которое каждый экземпляр будет ссылаться.
Действительно, вы должны сделать класс B наследует от класса A:
function B(){
this.object = new A();
}
B.prototype.a = function(){
return object.a;
}
, который может быть немного раздражает, так как вы должны затем создать новый Геттеры/сеттеры, buuuuuuuttttt, если вы чувствуете себя немного приключений, вы может построить что-то вроде этого ......
function breakApart(what){
var functions = [];
var properties = [];
for(property in what){
if(typeof what[property] == 'function'){
functions.push({'name':property,'value':what[property]});
}else{
properties.push({'name':property,'value':what[property]});
}
}
var data = [
{'title':'functions','data':functions},
{'title':'properties', 'data':properties}
];
return data;
}
Добавить несколько Eval() вызывает и определенную логику, и вы можете сделать эту функцию построить вам новые геттеры/сеттеры ссылки/функции.
Это работает, но при условии, что это означает различие между прототипом унаследованных переменных и его собственными членами, вероятно, это лекарство хуже проблемы (объявление вне функции). – Macha
Я не знаю другого способа сделать что-то подобное. Невозможно установить прототип функции до ее объявления. Метод, который вы в настоящее время используете, - это «по-книжке». – tcooc
Назначение 'this.prototype' не имеет смысла, свойство' prototype' должно использоваться в [конструкторских функциях] (https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects#Using_a_Constructor_Function), ' this' value - просто новый экземпляр объекта. – CMS