Я думаю, что вы ищете чистое прототип наследования .
В стандарте ECMAScript 5-го издания представлен метод Object.create
, этот метод создает объект, который напрямуюнаследуется от первого переданного аргумента (который может быть либо null
, либо объектом).
Например:
var A = {
variable: null,
method : function () { alert(this.variable); };
};
var alpha = Object.create(A);
alpha.variable = 8; // or above `Object.create(A, {'variable': { value: 8 } });`
var beta = Object.create(A);
beta.variable = 9;
Этот метод доступен в самых последних браузерах , однако можно грубо эмулировать в реализации ECMAScript 3:
if (!Object.create) {
Object.create = function (o) {
if (arguments.length > 1) { throw Error('Second argument not supported'); }
if (o === null) { throw Error('Cannot set a null [[Prototype]]'); }
if (typeof o != 'object') { throw TypeError('Argument must be an object'); }
function F(){}
F.prototype = o;
return new F;
};
}
Обратите внимание, что есть некоторые функции, которые нельзя эмулировать в ES3, например, второй аргумент, он ожидает дескриптор свойства, такой как используемый дескрипторс помощью нового метода Object.defineProperties
.
Кроме того, Object.create
позволяет создавать объект, который не наследуется ни от какого другого объекта, устанавливая для его [[Prototype]]
значение * 1026.*