JSFiddle - React, Tailwind, and code Playground

by avrelian

JavaScript

// активное наследование


var create = function(pattern, actionsToRemove, actionsToChange, actionsToAdd){
    var i, action;
    
    for(i = 0; i < actionsToRemove.length; i++){
        action = actionsToRemove[i];
        if(pattern[action]) delete pattern[action];
    }
    
    for(action in actionsToChange){
        if(pattern[action]) pattern[action] = actionsToChange[action];
    }
    
    for(i = 0; i < actionsToAdd.length; i++){
        action = actionsToAdd[i];
        pattern[action] = window[action];
    }
    
    return pattern;
};

var createClass = function(pattern, actionsToRemove, actionsToChange, actionsToAdd){
    var klass = function(){};
    klass.prototype = create(pattern, actionsToRemove, actionsToChange, actionsToAdd);
    return klass;
};

window.isAlive = function(){
    return true;
};


var animal = create({}, [], {}, ['isAlive']);

var notAnimal = create(animal, [], {'isAlive': function(){ return 'boo'; }}, []);

var notAnimalClass = function(){};
notAnimalClass.prototype = notAnimal;

var someNotAnimal = new notAnimalClass;

console.log(someNotAnimal);

var classAnimal = createClass({}, [], {}, ['isAlive']);
console.log(classAnimal);
console.log(new classAnimal);
console.log(typeof (new classAnimal));