Показать сообщение отдельно
  #67 (permalink)  
Старый 04.11.2014, 13:49
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Object.defineProperty(Object.prototype, "extends",
Определяй не для Object.prototype, а для Function.prototype. Этот метод применим только к функциям.
Задачу можно решить наследованием от объекта, а не от класса:
Object.defineProperty(Function.prototype, "extends", {
    value: function(parent) {
        *!*var inheritFrom = typeof parent == "function" ? parent.prototype : parent;*/!*
        this.prototype = Object.create(inheritFrom, {
            constructor: {
                value: this,
                writable: true,
                configurable: true,
                enumerable: false
            }
        });
    },
    enumerable: false,
    writable: true,
    configurable: true
});

var IODevice = {

};

function Device1() {}
Device1.extends(IODevice);

function Device2() {}
Device2.extends(IODevice);

new Device1();
new Device2();
new IODevice(); //TypeError: IODevice is not a constructor

В ES6 так:
var IODevice = {};
class Device1 prototype IODevice {

}
class Device2 prototype IODevice {

}

Последний раз редактировалось Erolast, 04.11.2014 в 13:54.
Ответить с цитированием