Я использую этот метод клонирования для наследования прототипов из Pro JavaScript Design Patterns , который в основном совпадает с функцией Крокфорда object () .(Единственное отличие состоит в том, что Крокфорд добавляет паренк для вызова, но так как F пусто, я не уверен, что это важно. Я не думаю, что проблема.)
clone = function(object) {
function F() {}
F.prototype = object;
return new F;
};
Итак, применяя это, яищу сделать два объекта, один из которых наследует методы от другого.Один предназначен для размеров области просмотра, а другой - для размеров устройства.Но оба используют одинаковые математические сравнения, поэтому я думаю, что имеет смысл, чтобы одно наследовало другое.( Больше информации о реальных методах здесь .)
var Viewport = {
inORout: function (curr, min, max) {
// !@return boolean true if curr equals min or max, or is in between.
min = min || 0; // Default min.
return !max ? ( curr >= min ) : ( curr >= min && curr <= max );
}
, width: function() {
return document.documentElement.clientWidth;
}
, height: function() {
return document.documentElement.clientHeight;
}
, inWidthRange: function (min, max) {
return this.inORout(this.width(), min, max);
}
, inHeightRange: function (min, max) {
return this.inORout(this.height(), min, max);
}
};
// I want to use prototypal inheritance to make Device inherit the
// inORout/inWidthRange/inHeightRange methods from Viewport but
// override the width() and height() methods:
var Device = clone(Viewport);
Device.width = function() {
return window.screen.width;
};
Device.height = function() {
return window.screen.height;
};
Но проблема в том, что я получаю такие ошибки:
Object # <Object> has no method 'inORout'
and
Object # <Object> has no method 'width'
and
Object # <Object> has no method 'height'
Если я изменю ссылкудо this.width()
и т. д. в Viewport до Viewport.width()
и т. д. ошибки исчезают, но тогда я думаю, что наследование не работает.Ошибки происходят, когда я использую методы из любого объекта.Что мне не хватает?Есть ли лучший шаблон для этого?Как я могу сделать эту работу?