Javascript не имеет никакой нативной конструкции для достижения этой цели.Тем не менее, есть служебные библиотеки, которые помогут вам достичь этого.
Если вы заинтересованы в этом, взгляните на базовую библиотеку Дина Эдварда:
http://dean.edwards.name/weblog/2006/03/base/
Вы, вероятно, можете использовать это как есть, чтобы достичь того, что выхочу.В любом случае, я могу порекомендовать каждому программисту javascript прочитать этот код и попытаться понять, как он работает - это сделает вас лучшим программистом.
Очень простое решение, которое вообще не зависит от наследования иТакже решается проблема передачи аргументов, заключающаяся в использовании объектных литералов в качестве аргументов.Чтобы назначить вам, просто скопируйте все поля из литерала объекта следующим образом:
//copy instance variables from source to target
function copyInstanceVars(source, target){
var p,v;
for (p in source){
if (source.hasOwnProperty(p)) {
v = source[p];
target[p] = v;
}
}
return target;
}
//Shape, base class.
var Shape;
(Shape = function(config) {
copyInstanceVars(config, this); //copy instance variables from the config
}).prototype = { //class members go in the prototype
shrink: function(){
reduce(coordinates);
}
};
//Sphere, subclass of Shape
var Sphere;
(Sphere = function(config){
Shape.apply(this, arguments);
}).prototype = copyInstanceVars(Shape.prototype, { //inherit methods from Shape
role: function(){
move(coordinates);
};
});
Затем, когда создаются экземпляры объектов, вы должны сделать:
var shape = new Shape({
color: "blue",
...,
coordinates: {x:10, y:20}
});
var sphere = new Sphere({
color: "blue",
...,
...,
radius: 10
});
Итак, в этомВ этом случае переменные экземпляра - это просто те поля, которые присутствуют во всем, что вы передаете в конструктор, а функция copyInstanceVars позаботится об этом процессе копирования.(проверка hasOwnProperty гарантирует, что мы получаем только переменные экземпляра).
В этом примере также показано, как наследовать методы с помощью той же функции copyInstanceVars.Но на этот раз мы применим его к прототипу конструктора (потому что мы «объявили» методы как переменные экземпляра в прототипе)