| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /**
- * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
- /**
- * @module utils/mix
- */
- /**
- * Copies enumerable properties and symbols from the objects given as 2nd+ parameters to the
- * prototype of first object (a constructor).
- *
- * class Editor {
- * ...
- * }
- *
- * const SomeMixin = {
- * a() {
- * return 'a';
- * }
- * };
- *
- * mix( Editor, SomeMixin, ... );
- *
- * new Editor().a(); // -> 'a'
- *
- * Note: Properties which already exist in the base class will not be overriden.
- *
- * @param {Function} [baseClass] Class which prototype will be extended.
- * @param {Object} [...mixins] Objects from which to get properties.
- */
- export default function mix( baseClass, ...mixins ) {
- mixins.forEach( mixin => {
- Object.getOwnPropertyNames( mixin ).concat( Object.getOwnPropertySymbols( mixin ) )
- .forEach( key => {
- if ( key in baseClass.prototype ) {
- return;
- }
- const sourceDescriptor = Object.getOwnPropertyDescriptor( mixin, key );
- sourceDescriptor.enumerable = false;
- Object.defineProperty( baseClass.prototype, key, sourceDescriptor );
- } );
- } );
- }
|