123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 'use strict';
- var copy = require('object-copy');
- var define = require('define-property');
- var util = require('util');
- function extend(Parent, extendFn) {
- if (typeof Parent !== 'function') {
- throw new TypeError('expected Parent to be a function.');
- }
- return function(Ctor, proto) {
- if (typeof Ctor !== 'function') {
- throw new TypeError('expected Ctor to be a function.');
- }
- util.inherits(Ctor, Parent);
- copy(Ctor, Parent);
-
- if (typeof proto === 'object') {
- var obj = Object.create(proto);
- for (var k in obj) {
- Ctor.prototype[k] = obj[k];
- }
- }
-
- define(Ctor.prototype, '_parent_', {
- configurable: true,
- set: function() {},
- get: function() {
- return Parent.prototype;
- }
- });
- if (typeof extendFn === 'function') {
- extendFn(Ctor, Parent);
- }
- Ctor.extend = extend(Ctor, extendFn);
- };
- };
- module.exports = extend;
|