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));